我有以下示例数据集
df1 <- c(1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 2, 2)
df2 <- c(1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 2, 2, 2, 2)
df <- data.frame(df1, df2)
如果计数2小于3(df1中的计数2为2且df2中的计数为4),我想将每列中的值2替换为NA
。因此我的预期结果是
df1 df2
1 1
1 1
1 1
1 1
1 1
1 1
0 0
0 0
0 0
0 0
0 0
0 2
0 2
NA 2
NA 2
我知道如何直接替换值,例如df$df1[df$df1 == 2] <- NA
,但我不确定如何添加条件(即计数)。
答案 0 :(得分:1)
在Base R
df1[df1==names(which(table(df1) < 3))] = NA
df2[df2==names(which(table(df2) < 3))] = NA
答案 1 :(得分:0)
尝试使用data.table
,它更快更容易。为了您的目的,这应该
df1 <- c(1,1,1,1,1,1,0,0,0,0,0,0,0,2,2)
df2 <- c(1,1,1,1,1,1,0,0,0,0,0,2,2,2,2)
df <- data.frame(df1,df2)
library(data.table)
dt<- as.data.table(df)
dt[df1==2,df1:=NA]
如果您想添加条件,可以执行类似
的操作df1 <- c(1,1,1,1,1,1,0,0,0,0,0,0,0,2,2)
df2 <- c(1,1,1,1,1,1,0,0,0,0,0,2,2,1,2)
df <- data.frame(df1,df2)
library(data.table)
dt<- as.data.table(df)
dt[df1==2,df1:=ifelse(df2==1,NA,df1)]