选择数据框中每行的前2个NA值

时间:2018-04-12 14:59:02

标签: r dataframe dplyr

给出如下数据框:

           A         B         C         D         E
1         NA 0.1189026 0.1189026        NA        NA
2         NA 0.1189026 0.1189026        NA        NA
3         NA        NA        NA        NA        NA
4         NA        NA        NA        NA        NA
5  0.3214921        NA        NA 0.3214921 0.3214921
6         NA        NA        NA        NA        NA
7  0.3214921 0.1189026 0.1189026 0.3214921 0.3214921
8  0.3214921        NA        NA 0.3214921 0.3214921
9        NA 0.1189026 0.1189026        NA        NA

我想选择每行的前两个非NA值。我该怎么办?

回报可能如下所示:

 [1,] 0.1189026 0.1189026
 [2,] 0.1189026 0.1189026
 [3,]        NA        NA
 [4,]        NA        NA
 [5,] 0.3214921 0.3214921
 [6,]        NA        NA
 [7,] 0.3214921 0.1189026
 [8,] 0.3214921 0.3214921
 [9,] 0.1189026 0.1189026

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

apply(df, 1, function(x) x[!is.na(x)][1:2])

或转置结果:

t(apply(df, 1, function(x) x[!is.na(x)][1:2]))

答案 1 :(得分:1)

替代:

library(magrittr)

DF %>% t %>% data.frame %>% lapply(function(x)head(x[!is.na(x)],2)) %>% do.call(rbind,.)

结果:

#          [,1]      [,2]
# X2  0.1189026 0.1189026
# X3  0.1189026 0.1189026
# X6  0.3214921 0.3214921
# X8  0.3214921 0.1189026
# X9  0.3214921 0.3214921
# X10 0.1189026 0.1189026