我承認這是一個很差的問題標題,但我無法想出適當的標題,因爲我不太確定我在這裏要做什麼處理:通過列表中的列表將數據框轉換爲描述性文本
我有一個數據幀,看起來像這樣:降低下列方式中的數據
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
地圖彈出窗口使用):
位置
組織1
項目;項目B
組織2
項目C
位置乙
組織2
項目d
組織3
項目è;項目˚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
方法
'DF%>%GROUP_BY(地點,組織)%>%綜述(項目=名單(項目))%>%綜述(項目=列表(setNames(project,organization)))%>%{setNames(。$ projects,。$ location)}'? – alistaire