我有一个带逗号的条目。如何拆分成单独的行?

时间:2016-06-15 18:19:26

标签: r

我有一个类似于下面的数据框

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个不同的术语!

2 个答案:

答案 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