Структурировать несколько биноминальных столбцов в один столбец

#r #database #dplyr #data.table #format

#r #База данных #dplyr #данные.таблица #форматировать

Вопрос:

У меня есть набор данных, который выглядит примерно так:

 X1  X2     X3
Red NA     NA
NA  Blue   NA
NA  Green  NA 
NA  NA     Red
NA  Yellow NA
NA  NA     Blue
 

И мне нужно преобразовать в этой форме:

    Result
   Red
   Blue
   Green
   Red
   Yellow
   Blue
 

Заранее благодарю вас.

Комментарии:

1. объединить (X1, X2, X3)

Ответ №1:

В base R , мы можем использовать max.col

 data.frame(Result = df1[cbind(seq_len(nrow(df1)), 
          max.col(!is.na(df1), 'first'))])
 

-вывод

 #  Result
#1    Red
#2   Blue
#3  Green
#4    Red
#5 Yellow
#6   Blue
 

данные

 df1 <- structure(list(X1 = c("Red", NA, NA, NA, NA, NA), X2 = c(NA, 
"Blue", "Green", NA, "Yellow", NA), X3 = c(NA, NA, NA, "Red", 
NA, "Blue")), class = "data.frame", row.names = c(NA, -6L))
 

Ответ №2:

Ниже приведен базовый вариант R

 > data.frame(result = df[!is.na(df)])
  result
1    Red
2   Blue
3  Green
4 Yellow
5    Red
6   Blue
 

Данные

 > dput(df)
structure(list(X1 = c("Red", NA, NA, NA, NA, NA), X2 = c(NA, 
"Blue", "Green", NA, "Yellow", NA), X3 = c(NA, NA, NA, "Red",
NA, "Blue")), class = "data.frame", row.names = c(NA, -6L))
 

Ответ №3:

Создайте случайный df и преобразуйте:

 x <- sample(c(NA, NA, 'red', 'green', 'blue'), 12, replace = TRUE)
m <- matrix(x, ncol = 3)
df <- as.data.frame(m)

result <- unlist(t(df)) #transpose of dataframe to order result by row
result <- result[!is.na(result)]
result <- as.data.frame(result)
result
  result
1  green
2   blue
3    red
4  green
5    red
6   blue
7   blue
8   blue