将第二列分配给第一列

时间:2020-09-24 11:46:27

标签: r dataframe

我有一个像这样的数据结构:

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

谢谢。

1 个答案:

答案 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  
相关问题