我有一个像这样的数据结构:
X1 X2 X3
AA x1;y1 100
BB 200
CC x3;y3;z3 300
DD x4;y4 400
可复制的数据
df <- data.frame(
X1 = c("AA", "BB", "CC", "DD"),
X2 = c("x1;y1", "", "x3,y3,z3", "x4;y4"),
X3 = c("100", "200", "300", "400")
)
我如何将第二列分配到第一列。 输出:
Xf X3
AA 100
x1 100
y1 100
BB 200
CC 300
x3 300
y3 300
z3 300
DD 400
x4 400
y4 400
谢谢。
答案 0 :(得分:3)
粘贴前两列,然后分成几行:
library(tidyr)
library(dplyr)
df %>%
transmute(new = paste(X1, X2, sep = ";"), X3) %>%
separate_rows(new, sep = "[;,]")
# # A tibble: 12 x 2
# new X3
# <chr> <fct>
# 1 AA 100
# 2 x1 100
# 3 y1 100
# 4 BB 200
# 5 x2 200
# 6 CC 300
# 7 x3 300
# 8 y3 300
# 9 z3 300
# 10 DD 400
# 11 x4 400
# 12 y4 400
编辑:过滤出空白行-""
df %>%
transmute(new = paste(X1, X2, sep = ";"), X3) %>%
separate_rows(new, sep = "[;,]") %>%
filter(new != "")
# # A tibble: 11 x 2
# new X3
# <chr> <fct>
# 1 AA 100
# 2 x1 100
# 3 y1 100
# 4 BB 200
# 5 CC 300
# 6 x3 300
# 7 y3 300
# 8 z3 300
# 9 DD 400
# 10 x4 400
# 11 y4 400