我有一个类似于下面的数据框
df <- data.frame(var1=c('apple, bob, cat', 'b', 'c'), var2=c('d', 'e', 'f'))
df
var1 var2
1 apple, bob, cat d
2 b e
3 c f
我需要将var1 $ 1拆分为:
var1 var2
1 apple d
2 bob d
3 cat d
4 b e
5 c f
这样var2是重复的..我知道如何复制行但不确定是否可以将var1 $ 1拆分为3行。我的df实际上有很多行,类似于上面的“apple,bob,cat”问题,有多达20个不同的术语!
答案 0 :(得分:0)
使用最新的tidyr
包(tidyr 0.5.0),您可以
df <- data.frame(var1=c('apple, bob, cat', 'b', 'c'), var2=c('d', 'e', 'f'))
tidyr::separate_rows(df, var1)
# var2 var1
# (fctr) (chr)
# 1 d apple
# 2 d bob
# 3 d cat
# 4 e b
# 5 f c
答案 1 :(得分:0)
这是使用@lukeA提供的data.frame的基本R方法。
# split the variable by commas into a list
temp <- strsplit(as.character(df$var1), split=", ")
# form new data.frame
dfNew <- data.frame(var1=unlist(temp), var2=rep(df$var2, sapply(temp, length)))
strsplit
函数分割字符向量,此处为&#34;,&#34;并返回一个列表。 unlist
按列表元素返回列表元素的每个元素的向量。 rep
然后按temp中每个列表元素的长度重复var2。
这是输出:
> dfNew
var1 var2
1 apple d
2 bob d
3 cat d
4 b e
5 c f