R条件lapply?
R conditional lapply?
我有一个数据框,例如
a = c(2,NA,3,4)
b = c(NA,3,NA,NA)
c= c(5,NA,7,9)
test = data.frame(a,b,c)
> test
a b c
1 2 NA 5
2 NA 3 NA
3 3 NA 7
4 4 NA 9
我想在 test$b 中仅填写 NA 值,其中包含该行的 test$a 和 test$c 的平均值。结果应该是
a b c
1 2 3.5 5
2 NA 3 NA
3 3 5 7
4 4 6.5 9
我已经尝试过 apply 系列,但没有任何进展。想避免 for 循环,因为有人告诉我应该尽量避免 for 循环。
我想用英语说,
if test$b[i] == NA, test$b[i] = (test$a[i] + test$b[i])/2
else leave test$b[i] as it is.
我确定此类问题已得到多次回答,但我找不到(或识别)类似的东西。提前致谢。
您可以为 'b' 列中 'NA' 的元素创建逻辑行索引 ('indx')。通过获取 'b' 以外的列的 rowMeans,使用它来替换 'b' 中的 NA 值。 (根据@thelatemail 的评论修改)
indx <- is.na(test$b)
test$b[indx] <- rowMeans(test[indx,], na.rm=TRUE)
test
# a b c
#1 2 3.5 5
#2 NA 3.0 NA
#3 3 5.0 7
#4 4 6.5 9
我有一个数据框,例如
a = c(2,NA,3,4)
b = c(NA,3,NA,NA)
c= c(5,NA,7,9)
test = data.frame(a,b,c)
> test
a b c
1 2 NA 5
2 NA 3 NA
3 3 NA 7
4 4 NA 9
我想在 test$b 中仅填写 NA 值,其中包含该行的 test$a 和 test$c 的平均值。结果应该是
a b c
1 2 3.5 5
2 NA 3 NA
3 3 5 7
4 4 6.5 9
我已经尝试过 apply 系列,但没有任何进展。想避免 for 循环,因为有人告诉我应该尽量避免 for 循环。
我想用英语说,
if test$b[i] == NA, test$b[i] = (test$a[i] + test$b[i])/2
else leave test$b[i] as it is.
我确定此类问题已得到多次回答,但我找不到(或识别)类似的东西。提前致谢。
您可以为 'b' 列中 'NA' 的元素创建逻辑行索引 ('indx')。通过获取 'b' 以外的列的 rowMeans,使用它来替换 'b' 中的 NA 值。 (根据@thelatemail 的评论修改)
indx <- is.na(test$b)
test$b[indx] <- rowMeans(test[indx,], na.rm=TRUE)
test
# a b c
#1 2 3.5 5
#2 NA 3.0 NA
#3 3 5.0 7
#4 4 6.5 9