如何用R将数据帧中的两列转换为一个列表



我得到了一个类似的数据帧

输入

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创建

最新更新