gpt4 book ai didi

r - 从数据框列表中创建一个命名表

转载 作者:行者123 更新时间:2023-12-04 21:04:17 30 4
gpt4 key购买 nike

假设我有一列带有产品 ID 的列和带有有关它们的特征的数据框列表:

捆绑数据框

 bundle
1 284993459
2 1048768805
3 511310430
4 1034630958
5 1235581326

d2 列表
[[1]]
id value
1 35 0.2
2 1462 0.2
3 1109 0.2
4 220 0.2
5 211 0.1

[[2]]
list()

[[3]]
id name value
1 394 0.5
2 1462 0.5

[[4]]
id name value
1 926 0.3
2 1462 0.3
3 381 0.3
4 930 0.2

[[5]]
id name value
1 926 0.5
2 1462 0.5

我需要为每个产品创建包含所有特征 ID 及其值的列。
bundle =  data.frame(bundle =  c(284993459,1048768805,511310430,1034630958,1235581326))
d2<- list(data.frame(id = c(35,1462,1109,220,211), value = c(0.2, 0.2, 0.2,0.2,0.1)),
data.frame(id = NULL, value = NULL),
data.frame(id = c(394,1462), value = c(0.5,0.5)),
data.frame(id = c(926,1462,381,930), value = c(0.3,0.3,0.3,0.2)),
data.frame(id = c(926,1462), value = c(0.5,0.5)))

bundle 35 1462 1109 220 211 394 1462
1 284993459 0.2 0.2 0.2 0.2 0.1 0 0
2 1048768805 0 0 0 0 0 0 0
3 511310430 0 0 0 0 0 0.5 0.5

无法弄清楚如何做到这一点。有一个想法取消列出此数据框列表,但没有任何好处,因为有超过 8000 个产品 ID:
for (i in seq(d2))
assign(paste0("df", i), d2[[i]])

如果我们采用与我必须不同的方法来连接转置特征数据帧,那么值将逐行填充。

最佳答案

这是一个 tidyverse解决方案。首先,我们向所有 data.frames 添加一个 bundle 列并使用 purr::map2_dfr 将它们缝合在一起,然后使用 tidyr::spread格式化为宽。

library(tidyverse)
res <- map2_dfr(bundle$bundle,d2,~mutate(.y,bundle=.x)) %>%
spread(id,value,)
res[is.na(res)] <- 0
# bundle 35 211 220 381 394 926 930 1109 1462
# 1 284993459 0.2 0.1 0.2 0.0 0.0 0.0 0.0 0.2 0.2
# 2 511310430 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.0 0.5
# 3 1034630958 0.0 0.0 0.0 0.3 0.0 0.3 0.2 0.0 0.3
# 4 1235581326 0.0 0.0 0.0 0.0 0.0 0.5 0.0 0.0 0.5

关于r - 从数据框列表中创建一个命名表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50464389/

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