2017-07-27 84 views
4

所以我有一个数据帧为NAS的数据帧(R)凝露行

是myDF

  Pro1 Pro2 Pro3 Pro4 
Pathway1 Woot <NA> Yeet Yike 
Pathway2 Dang <NA> <NA> Yike 
Pathway3 Blah Try  <NA> Lost 

我wan't压缩NA的,所以它看起来像这样

revisedmydf

  Pro1 Pro2 Pro3 Pro4 
Pathway1 Woot Yeet Yike 
Pathway2 Dang Yike 
Pathway3 Blah Try  Lost 

基本上,NA被删除,然后在它旁边的列中的信息被拉入它的空间。我不知道如何处理这个问题,我不确定我是否正确地标题或正在使用正确的术语。所以,如果这是一个重复的问题,我很抱歉。
最好!

回答

4

我们可以使用apply循环遍历行,根据“NA”元素的数量连接非NA的行元素和复制空白("")(可能更好的是使用NA而不是"" - 在这种情况下c(x[!is.na(x)], x[is.na(x)])

mydf[] <- t(apply(mydf, 1, function(x) c(x[!is.na(x)], rep("", sum(is.na(x)))))) 
mydf 
#   Pro1 Pro2 Pro3 Pro4 
#Pathway1 Woot Yeet Yike  
#Pathway2 Dang Yike   
#Pathway3 Blah Try Lost  

或者使用order

mydf[] <- t(apply(mydf, 1, function(x) x[order(is.na(x))])) 
+0

出于某种原因,当我运行该代码,它不给我相同的输出,它给你 –

+2

@TaylorMaurer你可以检查你的数据集的'str'。你有“不适用”或“不适用”吗?示例数据中'is.na(mydf)'的输出在变换之前的输入是什么 – akrun

+1

它是“NA”。一旦我将它转换为NA,它就起作用了。谢谢! –