我想将同一行结尾的2“NA”替换为同一行的前2个值。并且对于每个具有“NA”的连续行执行此操作,即在我的数据帧“Vracpop1”中为98行。 我正在搜索和搜索,但我不能这样做...感谢您的帮助!
Vracpop1
individuals pop loc1 loc2 loc3 loc4 loc5 loc6 loc7 loc8 loc9 loc10 loc15
1 1_1 1 499 501 500 500 500 500 499 500 500 499 501
2 499 501 500 501 500 500 499 500 500 500 500 NA NA
3 1_2 1 499 501 500 500 500 500 500 500 500 499 501
4 499 501 500 500 500 500 499 500 500 500 500 NA NA
5 1_3 1 499 501 500 501 500 500 499 500 500 500 501
6 499 501 500 500 500 500 499 500 500 500 500 NA NA
...
答案 0 :(得分:0)
有很多不同的方法可以实现这一目标。这是一个基础R解决方案:
df$individuals <- as.character(df$individual);
sel <- rowSums(is.na(df[, (ncol(df)-1):ncol(df)])) == 2;
df[sel, (ncol(df)-1):ncol(df)] <- df[sel, 1:2];
# individuals pop loc1 loc2 loc3 loc4 loc5 loc6 loc7 loc8 loc9 loc10 loc15
#1 1_1 1 499 501 500 500 500 500 499 500 500 499 501
#2 499 501 500 501 500 500 499 500 500 500 500 499 501
#3 1_2 1 499 501 500 500 500 500 500 500 500 499 501
#4 499 501 500 500 500 500 499 500 500 500 500 499 501
#5 1_3 1 499 501 500 501 500 500 499 500 500 500 501
#6 499 501 500 500 500 500 499 500 500 500 500 499 501
说明:(ncol(df)-1):ncol(df)
选择最后两列;如果最后两列中的条目都是rowSums(is.na(...)) == 2
,则TRUE
会返回NA
。在sel == TRUE
的行中,我们使用前两列中的条目替换最后两列中的NA
个条目。
df <- read.table(text =
" individuals pop loc1 loc2 loc3 loc4 loc5 loc6 loc7 loc8 loc9 loc10 loc15
1 1_1 1 499 501 500 500 500 500 499 500 500 499 501
2 499 501 500 501 500 500 499 500 500 500 500 NA NA
3 1_2 1 499 501 500 500 500 500 500 500 500 499 501
4 499 501 500 500 500 500 499 500 500 500 500 NA NA
5 1_3 1 499 501 500 501 500 500 499 500 500 500 501
6 499 501 500 500 500 500 499 500 500 500 500 NA NA", header = T, row.names = 1)