如果计数未达到特定条件,如何替换列中的值
How to replace values in column if the count do not reach certain condition
我有以下示例数据集
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 的计数小于三(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
,但我不知道如何添加条件(即计数)。
尝试使用 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)]
在基地 R
df1[df1==names(which(table(df1) < 3))] = NA
df2[df2==names(which(table(df2) < 3))] = 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, 2, 2)
df <- data.frame(df1, df2)
如果 2 的计数小于三(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
,但我不知道如何添加条件(即计数)。
尝试使用 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)]
在基地 R
df1[df1==names(which(table(df1) < 3))] = NA
df2[df2==names(which(table(df2) < 3))] = NA