【发布时间】:2017-11-11 20:56:24
【问题描述】:
我正在读取一个 yaml 文件,例如
- person_id: 111
person_name: Russell
time:
- 1
- 2
- 3
value:
- a
- b
- c
- person_id: 222
person_name: Steven
time:
- 1
- 2
value:
- d
- e
我想非规范化为:
person_id person_name time value
1 111 Russell 1 a
2 111 Russell 2 b
3 111 Russell 3 c
4 222 Steven 1 d
5 222 Steven 2 e
我有一个解决方案,但我希望有更简洁的方法。这是嵌套列表:
l <- list(
list(
person_id = 111L,
person_name = "Russell",
time = 1:3,
value = letters[1:3]
),
list(
person_id = 222L,
person_name = "Steven",
time = 1:2,
value = letters[4:5]
)
)
关于可能的重复,这个问题类似于(1)How to denormalize nested list in R?,但结构不同(round/diff/saldo结构与time/value相比在这里被转置) 和 (2) Split comma-separated column into separate rows,但 time 是向量,而不是像 director 这样的逗号分隔元素。我希望这种不同的结构有所帮助。
【问题讨论】:
-
这是一个简单的基础 R one 班轮:
do.call(rbind, lapply(l, data.frame))。 -
@lmo,太棒了。我喜欢
lapply()如何复制person_id和person_name的父变量。如果您将此作为回复发布,我很乐意投票。