我得到了一个类似的数据帧
输入
ID RE
am_A re456
am_A re4
am_B re20
am_C re47
am_B re456
am_C re12
我想把这两列转换成一个列表,如下所示:
输出:
$`am_A`
[1] "re456" "re4"
$`am_B`
[1] "re20" "re456"
$`am_C`
[1] "re47" "re12"
只需使用基于R:的split
split(dat$RE, dat$ID)
# $am_A
# [1] "re456" "re4"
#
# $am_B
# [1] "re20" "re456"
#
# $am_C
# [1] "re47" "re12"
数据:
dat <- structure(
list(
ID = c("am_A", "am_A", "am_B", "am_C", "am_B", "am_C"),
RE = c("re456", "re4", "re20", "re47", "re456", "re12")
),
class = "data.frame", row.names = c(NA,-6L)
)
dlply是为这个制作的:
your.data %>% dlply( "ID", `[[`, "RE" )
输出:
$am_A
[1] "re456" "re4"
$am_B
[1] "re20" "re456"
$am_C
[1] "re47" "re12"
attr(,"split_type")
[1] "data.frame"
attr(,"split_labels")
ID
1 am_A
2 am_B
3 am_C
如果你不想要那些额外的属性,你可以直接连接到c:
data %>% dlply( "ID", `[[`, "RE" ) %>% c
尝试使用pivot_wider
,然后使用unnest
,最后使用as.list
来获取列表。
library(tidyverse)
my_df <- tibble::tribble(
~ID, ~RE,
"am_A","re456",
"am_A","re4",
"am_B","re20",
"am_C","re47",
"am_B","re456",
"am_C","re12"
)
my_df %>%
pivot_wider(names_from = ID,
values_from = RE,
values_fn = list) %>% #to suppress a warning
unnest(cols = names(.)) %>% # unnest needs column names now
as.list()
#> $am_A
#> [1] "re456" "re4"
#>
#> $am_B
#> [1] "re20" "re456"
#>
#> $am_C
#> [1] "re47" "re12"
由reprex包(v0.3.0(于2021-04-13创建