Довольно просто: у меня есть фрейм данных, в котором значения во многих столбцах нужно разделить на свои собственные строки, исходя из ;
s в качестве разделителя.
После прочтения немного
df %>%
Reduce(separate_rows_, x = colnames)
работает, за исключением того, что я не могу передать параметр sep
(поэтому он также разделяется пробелами, запятыми и другими не алфавитно-цифровымисимволы).
В одном ответе предлагалось написать модифицированную версию функции, включающую параметр, но я не смог заставить ее работать:
Reduce(f = function(y) separate_rows_(sep = ";"), x = colnames)
Что я делаю неправильно?
Сказав это, мое идеальное решение было бы решением проблемы тидиверса, если бы оно было чище (возможно, map_dfr
?);но, очевидно, любое решение лучше, чем ничего:).
Вот пример данных:
structure(list(q1 = c("1,2,3,4", "2,4"), q2 = c("a,b", "e,f"),
q3 = c("c,d", "g,h,z")), row.names = 1:2, class = "data.frame")
Ожидаемый результат:
structure(list(q1 = c("1", "1", "1", "1", "2", "2", "2", "2",
"3", "3", "3", "3", "4", "4", "4", "4", "2", "2", "2", "2", "2",
"2", "4", "4", "4", "4", "4", "4"), q2 = c("a", "a", "b", "b",
"a", "a", "b", "b", "a", "a", "b", "b", "a", "a", "b", "b", "e",
"e", "e", "f", "f", "f", "e", "e", "e", "f", "f", "f"), q3 = c("c",
"d", "c", "d", "c", "d", "c", "d", "c", "d", "c", "d", "c", "d",
"c", "d", "g", "h", "z", "g", "h", "z", "g", "h", "z", "g", "h",
"z")), row.names = c(NA, -28L), class = "data.frame")
Процесс, который я хочу упростить, ненеобходимо передать имя каждого столбца следующим образом:
output <- test %>%
separate_rows(q1, sep = ",") %>%
separate_rows(q2, sep = ",") %>%
separate_rows(q3, sep = ",")