lak*_*ksa 1 conditional r lapply dataframe
我有一个数据框,如
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
Run Code Online (Sandbox Code Playgroud)
我想在test $ b中只填写NA值,测试$ a的平均值和该行的test $ c.结果应该是
a b c
1 2 3.5 5
2 NA 3 NA
3 3 5 7
4 4 6.5 9
Run Code Online (Sandbox Code Playgroud)
我已经尝试了申请家庭,但没有得到任何地方.想避免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.
Run Code Online (Sandbox Code Playgroud)
我确信这种问题已被多次回答,但我找不到(或认出)类似的东西.提前致谢.
您可以为"b"列中的"NA"元素创建逻辑行索引('indx').使用它来取代'b'中的NA值,取'b'以外的列的rowMeans.(根据@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
Run Code Online (Sandbox Code Playgroud)