我试图用相同列中的一半非零值替换数组列中的值。例如:
# 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,并且要替换的项目数不是替换长度的倍数。我明白问题是什么,但无法弄清楚如何解决它。谢谢你的帮助。
答案 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函数的名称。