我有一个数据框,可以将某些ID映射到列表版本:
id versions
1 1, 2, 4
2 1
3 3, 4
可以使用以下代码创建:
df <- data.frame(id=c(1, 2, 3),
versions=c("1 2 4", "1", "3 4"),
stringsAsFactors=F)
df$versions <- strsplit(df$versions, " ")
请注意versions
列的每个元素都是一个列表。
如何规范化此数据框?我需要得到一个这样的数据框:
id version
1 1
1 2
1 4
2 1
3 3
3 4
答案 0 :(得分:4)
stack
将是完美的:
stack(setNames(df$versions, df$id))
# values ind
# 1 1 1
# 2 2 1
# 3 4 1
# 4 1 2
# 5 3 3
# 6 4 3
答案 1 :(得分:1)
我改编并简化了another SO question的解决方案,以供将来参考:
data.frame(id = rep(df$id, sapply(df$versions, length)),
version = unlist(df$versions))
通过根据每个id具有的版本数(即列表id
的长度)重复每个id来计算新的versions
列。新的version
列是使用unlist
计算的,它只是通过连接列表中的所有元素来返回一个向量。