爆炸矢量元素并与数据框绑定?

时间:2018-08-08 09:34:17

标签: r

这是我的输入: v1v2df以相同的长度开头。

v1 = c("a", "b,c", "d")                                                                                                                                                                                                                                                                                                   
v2 = c("r", "s,t", "u")                                                                                                                                                                                                                                                                                                   
df = data.frame(id=1:3, name = c("X", "Y", "Z"))
> df
  id name
1  1    X
2  2    Y
3  3    Z

如何在R中完成此操作?

# expected output:
odf = data.frame(id=c(1,2,2,3), name = c("X", "Y", "Y", "Z"), v1 = c("a", "b", "c", "d"), v2 = c("r", "s", "t", "u"))
> odf
  id name v1 v2
1  1    X  a  r
2  2    Y  b  s
3  2    Y  c  t
4  3    Z  d  u

这意味着只要v1v2中有一个“ compound”元素,就爆炸它并在最终数据帧odf的其他列中复制值。

2 个答案:

答案 0 :(得分:1)

tidyr的separate_rows

首先绑定列,然后拆分行。分隔符可识别逗号在哪里,否则您也可以指定分隔符。

library(tidyr)
library(dplyr)

df %>% bind_cols(v1 = v1, v2 = v2) %>% 
  separate_rows(v1, v2)
  id name v1 v2
1  1    X  a  r
2  2    Y  b  s
3  2    Y  c  t
4  3    Z  d  u

答案 1 :(得分:0)

使用cSplit中的splitstackshape

library(splitstackshape)
cSplit(cbind(df, v1, v2), c("v1", "v2"), sep= ",", "long")
#   id name v1 v2
#1:  1    X  a  r
#2:  2    Y  b  s
#3:  2    Y  c  t
#4:  3    Z  d  u