これは質問のタイトルが悪いことを認めますが、ここで何をしようとしているのかよくわからないため、適切なタイトルを思いつきませんでした:
次のようなデータフレームがあります。
df <-
data.frame(
location = rep(LETTERS[1:4], each = 3),
organisation = rep(1:6, each = 2),
project = rep(letters[1:12])
)
location organisation project
1 A 1 a
2 A 1 b
3 A 2 c
4 B 2 d
5 B 3 e
6 B 3 f
7 C 4 g
8 C 4 h
9 C 5 i
10 D 5 j
11 D 6 k
12 D 6 l
これを変換したいのはleaflet
、次の方法でデータを削減するテキスト (マップ ポップアップで使用するため) です。
場所A
組織 1
プロジェクト a; プロジェクトb
組織 2
プロジェクトc
場所B
組織 2
プロジェクトd
組織 3
プロジェクト e; プロジェクトf
等
リストの作成と for ループで遊んでいますが、正しい構文に苦労しています。私がすべきことは、次のようなリストのリストを作成することだと思います:
list(
A =
list(
'1' = list('a', 'b'),
'2' = list('c')
),
B =
list(
'2' = list('d'),
'3' = list('e', 'f'))
)
など、与えるために:
$A
$A$`1`
$A$`1`[[1]]
[1] "a"
$A$`1`[[2]]
[1] "b"
$A$`2`
$A$`2`[[1]]
[1] "c"
$B
$B$`2`
$B$`2`[[1]]
[1] "d"
$B$`3`
$B$`3`[[1]]
[1] "e"
$B$`3`[[2]]
[1] "f"
などですが、これをプログラムで行い、テキストを作成する際にこれらの要素にアクセスしたいと考えています。「tidyverse」アプローチ内でこれを実行しようとしており、ネストされたデータフレームの両方を作成しました
library(tidyverse)
df %>%
group_by(location, organisation) %>%
nest
与える:
# A tibble: 8 × 3
location organisation data
<fctr> <int> <list>
1 A 1 <tibble [2 × 1]>
2 A 2 <tibble [1 × 1]>
3 B 2 <tibble [1 × 1]>
4 B 3 <tibble [2 × 1]>
5 C 4 <tibble [2 × 1]>
6 C 5 <tibble [1 × 1]>
7 D 5 <tibble [1 × 1]>
8 D 6 <tibble [2 × 1]>
より典型的なリストベースのアプローチは次のとおりです。
library(tidyverse)
loc_names <- unique(df$location)
map(
loc_names,
~ unique(df$organisation[df$location %in% .])
) %>%
set_names(loc_names)
与える:
$A
[1] 1 2
$B
[1] 2 3
$C
[1] 4 5
$D
[1] 5 6
しかし明らかにこれらは半分終わった作業であり (project
まだ変数を取り込んでいません)、次の段階で文字列に変換する必要があります。
tidyverse
特にアプローチ内にとどめられている場合は、すべてのヘルプが大歓迎です