是否可以在R中的replace()中使用函数?

时间:2013-06-26 09:43:20

标签: r function replace formula

我是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 <- replace(A,is.na(A) & !is.na(df$v3),df$v3/df$v1)

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

1 个答案:

答案 0 :(得分: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))