gpt4 book ai didi

r - 如何通过分解包含 r 中向量的列来拉伸(stretch)数据框?

转载 作者:行者123 更新时间:2023-12-05 01:15:40 25 4
gpt4 key购买 nike

我有一个数据框,其中有一列包含向量作为值。现在我需要通过分解向量来拉伸(stretch)这个数据框。

看看这个例子:

df <- structure(list(id = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2), id2 = c(1, 
2, 3, 4, 5, 1, 2, 3, 4, 5), value = c("1", "2", "3", "c(1,3,4)",
"1:5", "1", "2", "3", "1:4", "2:4")), .Names = c("id", "id2",
"value"), row.names = c(NA, 10L), class = "data.frame")
df
id id2 value
1 1 1 1
2 1 2 2
3 1 3 3
4 1 4 c(1,3,4)
5 1 5 1:5
6 2 1 1
7 2 2 2
8 2 3 3
9 2 4 1:4
10 2 5 2:4

this has to be changed into:

df2 <- structure(list(id = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), id2 = c(1L, 2L,
3L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 1L, 2L, 3L, 4L, 4L, 4L, 4L,
5L, 5L, 5L), value = c(1L, 2L, 3L, 1L, 3L, 4L, 1L, 2L, 3L, 4L,
5L, 1L, 2L, 3L, 1L, 2L, 3L, 4L, 2L, 3L, 4L)), .Names = c("id",
"id2", "value"), class = "data.frame", row.names = c(NA, -21L
))

df2
id id2 value
1 1 1 1
2 1 2 2
3 1 3 3
4 1 4 1
5 1 4 3
6 1 4 4
7 1 5 1
8 1 5 2
9 1 5 3
10 1 5 4
11 1 5 5
12 2 1 1
13 2 2 2
14 2 3 3
15 2 4 1
16 2 4 2
17 2 4 3
18 2 4 4
19 2 5 2
20 2 5 3
21 2 5 4

因此,将宽格式转换为长格式是一种不同于我们习惯的函数,例如reshape2 包。有人能解决这个问题吗?

*编辑

我忘了说有些值实际上是像这样的字符值:

df <- structure(list(id = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2), id2 = c(1, 
2, 3, 4, 5, 1, 2, 3, 4, 5), value = c("1", "2", "Hi", "c(1,3,4)",
"1:5", "1", "2", "hello", "1:4", "2:4")), .Names = c("id", "id2",
"value"), row.names = c(NA, 10L), class = "data.frame")
df
id id2 value
1 1 1 1
2 1 2 2
3 1 3 Hi
4 1 4 c(1,3,4)
5 1 5 1:5
6 2 1 1
7 2 2 2
8 2 3 hello
9 2 4 1:4
10 2 5 2:4

最佳答案

类似地,使用 data.table

的一行
library(data.table)
setDT(df)[, as.integer(eval.parent(parse(text = value))), by = .(id, id2)]
# id id2 V1
# 1: 1 1 1
# 2: 1 2 2
# 3: 1 3 3
# 4: 1 4 1
# 5: 1 4 3
# 6: 1 4 4
# 7: 1 5 1
# 8: 1 5 2
# 9: 1 5 3
# 10: 1 5 4
# 11: 1 5 5
# 12: 2 1 1
# 13: 2 2 2
# 14: 2 3 3
# 15: 2 4 1
# 16: 2 4 2
# 17: 2 4 3
# 18: 2 4 4
# 19: 2 5 2
# 20: 2 5 3
# 21: 2 5 4

关于r - 如何通过分解包含 r 中向量的列来拉伸(stretch)数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36550562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com