R将数组中的值替换为相同列中的一半非零值

时间:2013-11-20 14:29:15

标签: r replace

我试图用相同列中的一半非零值替换数组列中的值。例如:

# example    
a <- c(0, 1, 3)
b <- c(2, NA, 4)
c <- cbind(a,b)
# find non-zero minimum and divide by 2    
m <- apply(c, 2, function(x) min(x[x>0], na.rm = T))/2

我想得到这个

     a   b
[1,] 0.5 2
[2,] 1   1
[3,] 3   4

但是当我尝试用上面计算的值替换0(和NAs)时使用:

cc <- apply(c, 2, function(x) replace(x, x==0, m))

我收到的消息是不允许使用NA,并且要替换的项目数不是替换长度的倍数。我明白问题是什么,但无法弄清楚如何解决它。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

你可以尝试

apply(c, 2, function(x) "[<-"(x, !x | is.na(x), min(x[x > 0], na.rm = TRUE) / 2))

#        a b
# [1,] 0.5 2
# [2,] 1.0 1
# [3,] 3.0 4

BTW:请不要使用c作为对象名称,因为它已经是一个非常基本的R函数的名称。