#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