从前到后的最后两个非NA观测值

问题描述 投票:0回答:2

我有一个看起来像这样的数据框

    A  B  F  B  J  R  8  4

    B  A  7  5  NA NA NA NA

    C  1  9  NA NA NA NA NA

我想将每行的最后两个观测值(不包括NA)移到该行的前面。我尝试使用subset()和dplyr软件包,但还无法弄清楚。

所以它看起来应该像

8  4  A  B  F  B  J  R

7  5  B  A  NA NA NA NA

1  9  C  NA NA NA NA NA
r
2个回答
0
投票

我们可以逐行使用apply并以某种方式排列行,以获取最后两个非NA值的索引并选择其余索引。


0
投票

我们可以使用base Rhead通过tail进行此操作>

df[] <- t(apply(df, 1, function(x) `length<-`(c(tail(na.omit(x), 2), 
       head(na.omit(x), -2)), length(x))))
df
#   V1 V2 V3   V4   V5   V6   V7   V8
#1  8  4  A    B    F    B    J    R
#2  7  5  B    A <NA> <NA> <NA> <NA>
#3  1  9  C <NA> <NA> <NA> <NA> <NA>
© www.soinside.com 2019 - 2024. All rights reserved.