根据列总和替换R中数据框中的值

时间:2017-05-09 13:51:30

标签: r

我有一个如下所示的数据框:

GooseIPA HeadHunter BlindPig MosaicPromise HopHunter
9 10 8 6 10
0 6 8 4 1
0 2 3 1 0

如果colSums <=10我想用NA替换该列中的所有值。

输出如下:

 GooseIPA HeadHunter BlindPig MosaicPromise HopHunter
NA 10 8 6 10
NA 6 8 4 1
NA 2 3 1 0

2 个答案:

答案 0 :(得分:2)

如果您的数据框名为df,则可以使用:

      df[,colSums(df)<=10]<-NA

答案 1 :(得分:1)

以下是sapply的方法。

is.na(df) <- sapply(df, function(x) (sum(x) < 10))

这个想法是sapply遍历变量并检查每个变量的总和是否小于10,如果是,则为is.na分配TRUE。

df
  GooseIPA HeadHunter BlindPig MosaicPromise HopHunter
1       NA         10        8             6        10
2       NA          6        8             4         1
3       NA          2        3             1         0

同样的方法,但colSums可能更快

is.na(df) <- (colSums(df) < 10)

数据

df <- 
dput(df)
structure(list(GooseIPA = c(9L, 0L, 0L), HeadHunter = c(10L, 
6L, 2L), BlindPig = c(8L, 8L, 3L), MosaicPromise = c(6L, 4L, 
1L), HopHunter = c(10L, 1L, 0L)), .Names = c("GooseIPA", "HeadHunter", 
"BlindPig", "MosaicPromise", "HopHunter"), class = "data.frame", row.names = c(NA, 
-3L))