我正在研究一个基本上看起来像这个的数据帧.
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)
不幸的是,我不知道该怎么做.
非常感谢您的帮助.(也许你也可以解释你的代码在做什么?)
拉米
也可以尝试使用 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)
结果将是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)
yourdata[]<-t(apply(yourdata,1,function(x){
c(x[!is.na(x)],x[is.na(x)])}))
Run Code Online (Sandbox Code Playgroud)
应该有效:对于每一行,它用一个向量替换该行,该向量首先包含非 NA 的值,然后是 NA 值。