给出如下数据框:
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
答案 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