我收到某种数据的格式是一种数据框,它由两列组成:IDset和elems
第一个是一个整数,第二个是一个包含用逗号分隔的ID的字符串,如以下示例所示:
idset <- c(1111,2222,3333)
elems <- c('1,2,3', '1,3,5,7,9', '4,6')
df <- data.frame(idset, elems, stringsAsFactors = F)
所以df是:
idset elems
1 1111 1,2,3
2 2222 1,3,5,7,9
3 3333 4,6
我想要一个数据框(或矩阵或命名列表),其中每列有一个元素(例如“长”表):
idset elems
1 1111 1
2 1111 2
3 1111 3
4 2222 1
5 2222 2
6 2222 3
7 2222 7
8 2222 9
9 3333 4
10 3333 6
我知道我可以使用一些嵌套循环来做到这一点,但是我想知道是否存在一些方便的功能来为此提供更好的解决方案。
谢谢大家!
答案 0 :(得分:0)
您可以使用strsplit()
和lapply()
。
l <- lapply(1:nrow(df), function(x) strsplit(df$elems, ",")[[x]])
df1 <- data.frame(do.call(
rbind, lapply(1:length(l), function(x) cbind(df$idset[x], l[[x]]))))
names(df1) <- names(df)
屈服
> df1
idset elems
1 1111 1
2 1111 2
3 1111 3
4 2222 1
5 2222 3
6 2222 5
7 2222 7
8 2222 9
9 3333 4
10 3333 6
数据
> dput(df)
structure(list(idset = c(1111, 2222, 3333), elems = c("1,2,3",
"1,3,5,7,9", "4,6")), class = "data.frame", row.names = c(NA,
-3L))