У меня есть фрейм данных как таковой:
> df <- data.frame(var1 = c("1 Merge 2 ","3"),
+ var2 = c("1","2 Merge 3"),
+ var3 = "1")
> df
var1 var2 var3
1 1 Merge 2 1 1
2 3 2 Merge 3 1
Когда 'Merge' находится в элементе, я хотел бы разбить строку на строки до и после 'Merge'. Я хотел бы, чтобы это было обобщено, поэтому, если бы у нас было 1 Merge 2 Merge 3
, из этого должно быть выведено 3 строки.
Вот пример моего желаемого вывода для выше:
> desired_df <- data.frame(var1 = c("1","2","3","3"),
+ var2 = c("1","1","2","3"),
+ var3 = c("1","1","1","1"))
> desired_df
var1 var2 var3
1 1 1 1
2 2 1 1
3 3 2 1
4 3 3 1
Обновление:
Другой случай, когда у нас есть более одного столбца с «Объединением»:
> df
var1 var2 var3
1 1 Merge 2 Merge 4 1 1 Merge 2
2 3 2 Merge 3 1
> desired_df <- data.frame(var1 = c(1,1,2,2,4,4,3,3),
+ var2 = c(1,1,1,1,1,1,2,3),
+ var3 = c(1,2,1,2,1,2,1,1))
> desired_df
var1 var2 var3
1 1 1 1
2 1 1 2
3 2 1 1
4 2 1 2
5 4 1 1
6 4 1 2
7 3 2 1
8 3 3 1
Решение:
Мы можем использовать каналы и separate_rows()
для каждого переменная вроде так:
df %>%
separate_rows(var1, sep = " Merge ") %>%
separate_rows(var2, sep = " Merge ") %>%
separate_rows(var3, sep = " Merge ")