単純な問題で問題が発生していますが、単純な解決策が見つかりません。(この質問はおそらく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)
元のデータセットは 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')
しかし、うまくいきません。
どんな手掛かり ?