R - выделение непустых ячеек в каждой строке и создание новых столбцов - PullRequest
0 голосов
/ 07 марта 2019

Я много искал, чтобы найти решение, но не смог.Буду признателен за любую помощь.У меня есть датафрейм, как показано ниже:

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 ]

2 голосов
/ 07 марта 2019

Предполагая, что ваши "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 голос
/ 07 марта 2019

Как насчет создания оператора, чтобы сделать его максимально читабельным?

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

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