我在R中操纵数据框时遇到了问题。这是R中的基本内容,但我无法找到执行此类操作的最佳命令。
虚拟示例
Var1 20 300 39
Var2 49 23 91
Var3 0 239 210
如果值小于10
,如何在第2列中使用10
替换值;
或者,如果数据框中的所有值都大于100
,那么如何将其替换为200
?
答案 0 :(得分:6)
您可以使用apply
替换整个data.frame中大于200的所有值。
apply(df, 2, function(x) ifelse(x > 200, 100, x))
注意:如果任何列不是数字,则所有列都将转换为字符或因子。为避免这种情况,您可以执行以下操作。如果您有一个data.frame df
,其中包含两个数字列,即您要操作的第1列和第2列,以及您不想操作的两个非数字列,则可以执行以下操作:< / p>
df <- cbind(apply(df[,1:2], 2, function(x) ifelse(x > 200, 100, x)), df[,3:4])
@GregSnow评论后编辑:
在这种情况下使用lapply
可能更有用。
df[] <- lapply(df, function(x) ifelse(x>200, 100, x))
对于之前不知道的人(包括我自己),使用df[]
代替df
,df
的结构保持原样(感谢@GregSnow有价值的信息)。