在R中压缩包含NA的数据框行

4

我有一个数据框

mydf

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

我希望压缩NA值,使其看起来像这样:

revisedmydf

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

基本上,删除了NA,并将其旁边列中的信息拉入到其空间中。我不知道如何处理此问题,也不确定我是否正确命名了此问题或使用了正确的术语。因此,如果这是一个重复的问题,我很抱歉。
祝好!

1个回答

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))]))

由于某些原因,当我运行那段代码时,它并没有给我和你一样的输出。 - Taylor Maurer
2
@TaylorMaurer 请检查您的数据集中的 str。您是否有 NA"NA"。在转换之前,您的示例数据中 is.na(mydf) 的输出是什么? - akrun
1
它原本是“NA”。一旦我将其转换为NA,它就可以工作了。谢谢! - Taylor Maurer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接