R:如何在负面条件下更改所有值

问题描述

我有这个数据框

Data structure(list(ID = 1:3,WEEK1 = c(1L,"A",1.23),WEEK2 = c(1L,"AL",1.68),WEEK3 = c("L",1L,2L)),class = "data.frame",row.names = c(NA,-3L))

DF ID  WEEK1    WEEK2   WEEK3
   1   1        A       1.23
   2   1        AL      1.68 
   3   L        1       2

数据帧中有很多随机字符串。 我想使用负条件循环,将所有非1的值更改为0。

就像在数据框中一样

DF ID  WEEK1    WEEK2   WEEK3
   1   1        O       O
   2   1        O       O 
   3   O        1       O

这只能更改已知的字符串,但是可以将其更改为否定条件吗?

df %>% mutate(across(matches("WEEK"),chartr,old = '123',new =  'ABC'))

解决方法

我建议采用下一种方法。您必须注意,数据框中的所有值都是字符串:

#Data
Data <- structure(list(ID = 1:3,WEEK1 = c("1","A","1.23"),WEEK2 = c("1","AL","1.68"),WEEK3 = c("L","1","2")),class = "data.frame",row.names = c(NA,-3L))

代码:

#Loop
for(i in 2:dim(Data)[2])
{
  Data[,i]<-ifelse(Data[,i]!='1',Data[,i])
}

输出:

  ID WEEK1 WEEK2 WEEK3
1  1     1     1     0
2  2     0     0     1
3  3     0     0     0