我有一个包含一些信息的数据框。有些数据不适用。像这样的东西:
id fact sex
1 1 3 M
2 2 6 F
3 3 NA <NA>
4 4 8 F
5 5 2 F
6 6 2 M
7 7 NA <NA>
8 8 1 F
9 9 10 M
10 10 10 M
我必须通过一些规则改变事实(例如乘以 3 个具有 (data == "M") 的元素)。
我试过survey$fact[survey$sex== "M"] <- survey$fact[survey$sex== "M"] * 3
,但由于不适用,我有一些错误。
我知道我可以用 is.na(x) 检查元素是否为 NA,并在 [...] 中添加此条件,但我希望存在更漂亮的解决方案
最佳答案
我真的很喜欢ifelse
,它似乎总是具有关于 NA
的期望行为对我来说值(value)观。
survey$fact <- ifelse(survey$sex == "M", survey$fact * 3, survey$fact)
?ifelse
显示第一个参数是测试,第二个参数是分配的值(如果测试是 true
)最后一个参数的值 if false
。如果分配原来的data.frame
列为 false
返回值,它将分配测试失败的行而不修改它们。
这是您所要求内容的扩展,以表明您还可以测试 NA
值。
survey$fact <- ifelse(is.na(survey$sex), survey$fact * 2, survey$fact)
我也喜欢它的可读性。
关于r - 选择数据框中的一些项目并更改它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19609345/