R:当一列具有不等数量的条目时重塑数据帧

时间:2015-04-23 14:01:05

标签: r reshape

我有一个包含2个字符列的数据框x:

x <- data.frame(a = numeric(), b = I(list()))
x[1:3,"a"] = 1:3
x[[1, "b"]] <- "a, b, c"
x[[2, "b"]] <- "d, e"
x[[3, "b"]] <- "f"
x$a = as.character(x$a)
x$b = as.character(x$b)
x
str(x)

b列中的条目是逗号分隔的字符串。 我需要生成这个数据框:

1 a

1 b

1 c

2 d

2 e

3 f

我知道当我逐行循环时如何做到这一点。但是没有循环可以做到吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

你签出了require(splitstackshape)吗?

> cSplit(x, "b", ",", direction = "long")

   a b
1: 1 a
2: 1 b
3: 1 c
4: 2 d
5: 2 e
6: 3 f

答案 1 :(得分:0)

> s <- strsplit(as.character(x$b), ',')
> data.frame(value=rep(x$a, sapply(s, FUN=length)),b=unlist(s))
  value  b
1     1  a
2     1  b
3     1  c
4     2  d
5     2  e
6     3  f

答案 2 :(得分:0)

你去的地方应该非常快:

library(data.table)

x <- data.table(x)
x[ ,strsplit(b, ","), by = a]