R-在每一行中选择非空单元格并创建新列

时间:2019-03-07 09:45:39

标签: r dataframe data-manipulation

我一直在寻找很多解决方案,但是找不到。我将不胜感激任何帮助。我有一个如下数据框:

A B C D

x na na z

x t na na 

na z na x 

y na s  na

我想要的输出是:

A1 B1 

x z

x t  

z x 

y s 

2 个答案:

答案 0 :(得分:2)

假设您的“ na”实际上是NA s,并且您要删除的每一行中有相等数量的NA s,您可以这样做

data.frame(t(apply(df, 1, function(x) x[!is.na(x)])))

#  X1 X2
#1  x  z
#2  x  t
#3  z  x
#4  y  s

如果您使用字符串“ na”,则

data.frame(t(apply(df, 1, function(x) x[x != "na"])))

应该工作。

答案 1 :(得分:1)

如何创建一个运算符以使其尽可能可读?

library(dplyr)
`%|%` <- function(x,y) ifelse(is.na(x), y, x)

df %>%
  transmute(A1 = A %|% B %|% C %|% D,
            B1 = D %|% C %|% B %|% A)