如何在数据框中向左移动具有值的单元格

Ram*_*ham 4 r dataframe

我正在研究一个基本上看起来像这个的数据帧.


   X1   X2   X3 X4
x1  a    b   NA  c
x2  d   NA   NA  e
x3  f    g    h  i
x4  j   NA    k  l
Run Code Online (Sandbox Code Playgroud)

我想要做的是将每个单元格的行向左移动.最后,所有具有值的单元格应该向左聚集,而所有具有NA的单元格应该向右聚集.

最后,数据框应如下所示:


   X1   X2   X3 X4
x1  a    b   c  NA
x2  d    e   NA NA
x3  f    g    h  i
x4  j    k    l NA
Run Code Online (Sandbox Code Playgroud)

不幸的是,我不知道该怎么做.

非常感谢您的帮助.(也许你也可以解释你的代码在做什么?)

拉米

Dav*_*urg 6

也可以尝试使用 length<-

df[] <- t(apply(df, 1, function(x) `length<-`(na.omit(x), length(x))))
df
#    X1 X2   X3   X4
# x1  a  b    c <NA>
# x2  d  e <NA> <NA>
# x3  f  g    h    i
# x4  j  k    l <NA>
Run Code Online (Sandbox Code Playgroud)


A5C*_*2T1 5

你可以从我的"SOfun"包中获取我的naLast功能.

结果将是a matrix,但as.data.frame如果您愿意,可以轻松将其包装:

as.data.frame(naLast(mydf, by = "row"))
#    X1 X2   X3   X4
# x1  a  b    c <NA>
# x2  d  e <NA> <NA>
# x3  f  g    h    i
# x4  j  k    l <NA>
Run Code Online (Sandbox Code Playgroud)

安装包:

library(devtools)
install_github("mrdwab/SOfun")
Run Code Online (Sandbox Code Playgroud)


Cat*_*ath 4

yourdata[]<-t(apply(yourdata,1,function(x){
                           c(x[!is.na(x)],x[is.na(x)])}))
Run Code Online (Sandbox Code Playgroud)

应该有效:对于每一行,它用一个向量替换该行,该向量首先包含非 NA 的值,然后是 NA 值。