我在一个简单的问题上遇到了麻烦,我找不到简单的解决方案。(这个问题可能是一个duplicate
但我找不到它!)
我需要的是merge
在计算后将列表支持到其原始列表。
我需要这样做,merge
因为我正在做的计算对apply
他们来说太复杂了,直接列出来了。所以,我必须分开做,并以某种方式将它放回原始数据集。mutate
(因为这个问题, 我这里不能直接使用)。
因为我无法重现我的数据,所以我将用它mtcars
来演示我的问题。
我有一个原始列表,我正在对其应用计算(哪个都没有关系),例如:
library(dplyr)
library(purr)
我的原始数据集是一个列表
dt = mtcars %>%
group_by(gear) %>%
split(.$gear)
然后,在这个列表中,我做一个计算,例如:
dt %>%
map(~summarise(., cluster = mean(disp)))
我最终得到一个list
.
我的数据的(真实)结构最终看起来像这样
$`3`
gear cluster
1 3 326.3
$`4`
gear cluster
1 4 123
等等。我需要的只是将merge back
这个列表改为原始列表。我怎样才能做到这一点 ?
我需要(想要的输出)最终得到(在这里很难重现)我的原始值list
和merged
计算值。
就像是
$`3`
mpg cyl disp hp drat wt qsec vs am gear carb cluster
1 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 XXX
2 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 XXX
3 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 XXX
4 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 XXX
等等所有列表(df)
我再次强调,我的原始数据集是 list 而不是 data.frame。我需要的是合并lists
,而不是data.frame
。
我想到了类似的东西
dt = mtcars %>% # my data is a list
group_by(gear) %>%
split(.$gear)
fmerge = function(x) x %>% lapply(dt, ., by = 'gear')
dt %>%
map(~summarise(., cluster = mean(disp))) %>%
lapply(fmerge)
或者
dt %>%
map(~summarise(., cluster = mean(disp))) %>%
join_all(dt, ., by = 'gear')
但效果不好。
有什么线索吗?