【问题标题】:Replace values in selected columns by passing column name of data.frame into apply() or plyr function通过将 data.frame 的列名传递给 apply() 或 plyr 函数来替换选定列中的值
【发布时间】:2011-11-03 06:29:39
【问题描述】:

假设我有一个 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

我需要将bc列中的所有5替换为NA,然后返回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 函数(或者可能是其他一些完全不同的方式)来解决上述问题。谢谢~

【问题讨论】:

    标签: r dataframe


    【解决方案1】:
    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 可能会改用索引。

    【讨论】:

    • 太棒了。显然,我以一种非常复杂的方式得到了它。谢谢!
    • 最好使用lapply - 这里不需要简化。
    【解决方案2】:

    你可以这样做

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

    【讨论】:

      猜你喜欢
      • 2011-02-08
      • 1970-01-01
      • 1970-01-01
      • 2023-02-05
      相关资源
      最近更新 更多