这是我的输入:
v1
,v2
和df
以相同的长度开头。
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
这意味着只要v1
或v2
中有一个“ compound”元素,就爆炸它并在最终数据帧odf
的其他列中复制值。
答案 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