通过将data.frame的列名传递给apply()或plyr函数来替换所选列中的值

时间:2011-11-03 06:29:40

标签: r dataframe

假设我有一个date.frame,如:

df <- data.frame(a=1:5, b=sample(1:5, 5, replace=TRUE), c=5:1)
df
  a b c
1 1 4 5
2 2 3 4
3 3 5 3
4 4 2 2
5 5 1 1

我需要将所有5替换为NA列中的b&amp; c然后返回df

df
  a b  c
1 1 4  NA
2 2 3  4
3 3 NA 3
4 4 2  2
5 5 1  1

但我想做一个通用的apply()函数,而不是每个函数使用replace(),因为实际数据中实际上需要替换许多变量。假设我已经定义了一个变量列表:

var <- c("b", "c")

并想出类似的东西:

df <- within(df, sapply(var, function(x) x <- replace(x, x==5, NA)))

但没有任何反应。我正在考虑是否有办法通过将data.frame中的列名变量列表传递给通用apply / plyr函数(或者可能是其他一些完全不同的方式)来解决与上述类似的问题。感谢〜

2 个答案:

答案 0 :(得分:7)

df <- data.frame(a=1:5, b=sample(1:5, 5, replace=TRUE), c=5:1)
df
var <- c("b","c")
df[,var] <- sapply(df[,var],function(x) ifelse(x==5,NA,x))
df

我发现这里的ifelse符号更容易理解,但大多数Rers可能会使用索引。

答案 1 :(得分:6)

你可以做到

df[,var][df[,var] == 5] <- NA