【问题标题】:Is it possible to use a function in replace() in R?是否可以在 R 的 replace() 中使用函数?
【发布时间】:2013-06-26 09:43:19
【问题描述】:

我是 R 新手,想看看是否有更优雅、更快捷的方法来替换向量中的某些数据,当替换是有条件的并且新值基于公式时。只需将公式放入 replace() 就会出错,因为替换向量的大小(即整个向量的大小)大于替换的数量(即向量的子集)

这个 for 循环有效,但速度很慢:

A <- df$v2/df$v1
for(i in 1:length(A))  {
    if (is.na(A[i]) & !is.na(df$v3[i])) {
        A[i] <- df$v3[i]/df$v1[i]
    }
}

以下方法不起作用,我理解原因(替换需要与被替换对象的大小相同),但没有找到比上面的 for 循环更好的解决方案:

A &lt;- replace(A,is.na(A) &amp; !is.na(df$v3),df$v3/df$v1)

它给出了以下错误: 警告信息: 在替换(.... 要替换的项目数不是替换长度的倍数

【问题讨论】:

    标签: r function replace formula


    【解决方案1】:

    不明白为什么需要replace

    A <- with(df, v2/v1)
    repl <- is.na(A) & !is.na(df$v3)
    A[repl] <- with(df[repl, ], v3/v1)
    

    或者,由于您正在做的是计算 v2/v1 除非 v2 缺失而 v3 不存在,在这种情况下使用 v3/v1:

    A <- with(df, ifelse(!is.na(v2), v2/v1, v3/v1))
    

    【讨论】:

      猜你喜欢
      • 2020-06-01
      • 2018-09-15
      • 1970-01-01
      • 1970-01-01
      • 2012-04-29
      • 2018-02-27
      • 2021-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多