通过用逗号分隔的值打破一列来创建唯一的行

时间:2018-12-03 04:56:41

标签: r

我有一个看起来像这样的数据集:

C1     C2
A,B,C  1
A      2
D,A    3

我想将其转换为:

 C1     C2
 A      1
 B      1
 C      1
 A      2
 D      3
 A      3

我目前不知道如何进行搜索,甚至不知道要搜索什么。我一直在尝试使用data.table来表述某些内容,但无法实现任何对远程有用的功能。请告知如何实现此目标。

致Mods:如果可以找到类似的问题,请与类似的问题合并。我找不到任何东西,但强烈怀疑这是一个相当普遍的问题。

2 个答案:

答案 0 :(得分:1)

x <- read.table(header=TRUE, stringsAsFactors=FALSE, text="
 C1     C2
 A,B,C  1
 A      2
 D,A    3")


C1s <- strsplit(x$C1, ",")
C1s
# [[1]]
# [1] "A" "B" "C"
# [[2]]
# [1] "A"
# [[3]]
# [1] "D" "A"
data.frame(C1=unlist(C1s), C2=rep(x$C2, times=lengths(C1s)), stringsAsFactors=FALSE)
#   C1 C2
# 1  A  1
# 2  B  1
# 3  C  1
# 4  A  2
# 5  D  3
# 6  A  3

答案 1 :(得分:1)

您可以这样做:

df = data.frame(C1 = c("A,B,C", "A", "D,A"), C2=c(1,2,3))

library(stringr)
df2 <- data.frame(C1 = unlist(strsplit(as.character(df$C1), ",")), 
                  C2 = rep(df$C2, str_count(df$C1, ',')+1))