#r #tidyr
Вопрос:
Мне нужно проанализировать столбец, созданный из имен папок. В некоторых папках было много вложенных папок, что приводило к переменной величине «/» в названии. Как я могу разделиться на «/» и получить множество столбцов, в некоторых из которых будет «NA», если не было вложенных папок?
Репрекс:
df <- data.frame(group = c("a", "b", "c"), var1 = c(3, 1, 2),
id = c("C:/Users/me/big_folder/little_folder/plot/783/abc/551/statistics.csv",
"C:/Users/me/big_folder/little_folder/plot/rep/634/efg/552/statistics.csv",
"C:/Users/me/big_folder/228/hij/553/statistics.csv"))
separate(df, id, sep = "/", into = c(a, b, c, d, e, f, g, h, i, j))
Комментарии:
1. Вам нужен вектор строк, так как
into
аргумент также являетсяsep
т. е.separate(df, "id", sep = "/", into = letters[1:10])
Ответ №1:
Согласно с ?separate
в — Имена новых переменных для создания в качестве вектора символов. Используйте NA, чтобы опустить переменную в выводе.
Текущие коды операции используются into
без кавычек. Либо используйте встроенный вектор letters
library(tidyr)
separate(df, "id", sep = "/", into = letters[1:10])
или использовать
separate(df, "id", sep = "/", into =
c("a", "b", "c", "d", "e", "f", "g", "h", "i", "j"))
-выход
group var1 a b c d e f g h i j
1 a 3 C: Users me big_folder little_folder plot 783 abc 551 statistics.csv
2 b 1 C: Users me big_folder little_folder plot rep 634 efg 552
3 c 2 C: Users me big_folder 228 hij 553 statistics.csv <NA> <NA>
Ответ №2:
В случае, если вы ищете альтернативы: Мы могли бы использовать cSplit
из splitstackshape
пакета. Преимущество заключается в том, что нам не нужно определять результирующие столбцы перед:
library(splitstackshape)
cSplit(df, "id", "/")
выход:
group var1 id_01 id_02 id_03 id_04 id_05 id_06 id_07 id_08 id_09 id_10 id_11
1: a 3 C: Users me big_folder little_folder plot 783 abc 551 statistics.csv <NA>
2: b 1 C: Users me big_folder little_folder plot rep 634 efg 552 statistics.csv
3: c 2 C: Users me big_folder 228 hij 553 statistics.csv <NA> <NA> <NA>