Я пытаюсь свернуть несколько строк по уникальному идентификатору в R, но в каждом столбце может быть несколько переменных, которые я хочу сохранить в отдельных строках. Как я могу это сделать? Я пробовал функцию «Отдельные_строки», но она говорит, что каждый из вложенных столбцов должен иметь одинаковое количество элементов. Мой нет.
## Example1 start
sample_A.1 <- c ("sample_A", "","D","")
sample_A.2 <- c("sample_A", "","D","")
sample_A.3 <- c("sample_A", "","","red")
sample_B.1 <- c("sample_B", 28, "", "")
sample_B.2 <- c("sample_B", "", "D", "")
sample_B.3 <- c("sample_B", "", "N", "")
sample_B.4 <- c("sample_B", "", "", "orange")
sample_C.1 <- c("sample_C", 27, "", "")
sample_C.2 <- c("sample_C", 32, "", "")
sample_C.3 <- c("sample_C", "", "E", "")
sample_C.4 <- c("sample_C", "", "", "orange")
sample_C.5 <- c("sample_C", "", "", "yellow")
sample_C.6 <- c("sample_C", "", "", "green")
my.data <- data.frame(rbind(sample_A.1,sample_A.2,sample_A.3,sample_B.1,sample_B.2,sample_B.3,sample_B.4,sample_C.1,sample_C.2,sample_C.3,sample_C.4,sample_C.5,sample_C.6), stringsAsFactors = FALSE)
colnames(my.data) <- c("identifier", "var1", "var2", "var3")
# identifier var1 var2 var3
# sample_A 30
# sample_A D
# sample_A red
# sample_B 28
# sample_B D
# sample_B N
# sample_B orange
# sample_C 27
# sample_C 32
# sample_C E
# sample_C orange
# sample_C yellow
# sample_C green
## Or
## Example2 start
sample_A <- c("sample_A", 30, "D", "red")
sample_B <- c("sample_B", 28, "D, N", "orange")
sample_C <- c("sample_C", "27, 32", "E", "orange, yellow, green")
my.data2 <- data.frame(rbind(sample_A, sample_B, sample_C), stringsAsFactors = FALSE)
colnames(my.data2) <- c("identifier", "var1", "var2", "var3")
# identifier var1 var2 var3
# sample_A 30 D red
# sample_B 28 D, N orange
# sample_C 27, 32 E orange, yellow, green
Чтобы перейти от Примера 1 к Примеру 2 выше, я использовал следующий код (нужен plyr или dplyr) ...
library(dplyr)
my.data2a <- my.data %>% group_by(identifier) %>%
summarize_all(funs(paste(.[!is.na(.)], collapse = " ")))
my.data2 <- data.frame(lapply(my.data2a, trimws), stringsAsFactors=FALSE)
my.data2[2:4] <- sapply(my.data2[2:4], gsub, pattern=" ", replacement=", ")
Я попытался использовать следующий код для слияния данных в my.data2 в отдельные строки ... (нужен тидир и тиббл)
data2colnames <- c("var1", "var2", "var3")
my.data2 %>% separate_rows(data2colnames)
Но я получил ошибку: «Ошибка: все вложенные столбцы должны иметь одинаковое количество элементов». Мне нужно перейти к таблице «Конец» в ссылке «Пример вывода» выше, которая в основном выглядит следующим образом:
identifier var1 var2 var3
sample_A 30 D red
sample_B.1 28 D orange
sample_B.2 N
sample_C.1 27 E orange
sample_C.2 32 yellow
sample_C.3 green