我有一个大的113x159
数据框,如下所示:
i1 i2 i3 i4
1 49 76 3 65
2 35 14 37 98
3 90 17 71 27
4 27 65 54 88
我需要更改所有值< 20到NA
,像这样:
i1 i2 i3 i4
1 49 76 NA 65
2 35 NA 37 98
3 90 NA 71 27
4 27 65 54 88
有什么想法吗?
答案 0 :(得分:1)
这适用于您的示例,该示例包含所有数字列。
is.na(df) <- df < 20
df
i1 i2 i3 i4
1 49 76 NA 65
2 35 NA 37 98
3 90 NA 71 27
4 27 65 54 88
对于真实数据集,您似乎有因子列。在这种情况下,您应该使用sapply
来检查每列的类型,并仅在数字列上执行替换。这将有效
is.na(df[sapply(df, is.numeric)]) <- df[sapply(df, is.numeric)] < 20
也适用于您的示例。
警告:
小于运算符<
用于比较字符,但它们对<
返回FALSE
"t" < 20
[1] FALSE
"t" < 2000000000000
[1] FALSE
和>
"t" > 2000000000000
[1] TRUE