我有这个假设的数据框
df <- data.frame(K=c(NA, NA, 3, 4,0,2,NA, NA), A=c(NA, NA, NA, 4,0,3,NA, NA), B=c(NA, 2, NA, NA,0,NA,NA,0), C=c(0, 3, 5, NA,0,5,NA,5), D=c(NA, 3, 1, 2,0,10,NA,3))
df
K A B C D
1 NA NA NA 0 NA
2 NA NA 2 3 3
3 3 NA NA 5 1
4 4 4 NA NA 2
5 0 0 0 0 0
6 2 3 NA 5 10
7 NA NA NA NA NA
8 NA NA 0 5 3
我想按行查找第一个数值之前有多少个 NA(在该行中),并且我想将此信息添加为上述数据框中的最后一列
所以我想
df2 <- data.frame(K=c(NA, NA, 3, 4,0,2,NA, NA), A=c(NA, NA, NA, 4,0,3,NA, NA), B=c(NA, 2, NA, NA,0,NA,NA,0), C=c(0, 3, 5, NA,0,5,NA,5), D=c(NA, 3, 1, 2,0,10,NA,3),
nn=c(3,2,0,0,0,0,5,2))
df2
K A B C D nn
1 NA NA NA 0 NA 3
2 NA NA 2 3 3 2
3 3 NA NA 5 1 0
4 4 4 NA NA 2 0
5 0 0 0 0 0 0
6 2 3 NA 5 10 0
7 NA NA NA NA NA 1000
8 NA NA 0 5 3 2
例如,第一行在第一个值 0 之前包含 3 个 NA。第二行在第一个值 2 之前包含 2 个 NA。第三行在第一个值 3 之前包含零个 NA,第 4-6 行也是如此。对于第七行,我们只有 NA,因此在这种情况下我只使用任意值 1000。对于第八行,在第一个值 0 之前有两个 NA。
我试过这个
DD<-apply(df,1,function(x) which(!is.na(x)))
unlist(map(DD, 1) , use.names=FALSE)-1
但它不起作用,因为我得到
3 2 0 0 0 0 2
我错过了仅包含 NA 的行。有什么想法吗?是否可以使用 dplyr 来实现这一点?
请注意,我的真实数据集包含 500 列和 200000 行。因此,更通用的代码会很有帮助。
您可以使用
max.col
其中
7
第 - 行设置为,-1
因为整行NA
仅由 s 组成。