【问题标题】:Transform dataframe into list by condition in R/dplyr在 R/dplyr 中按条件将数据框转换为列表
【发布时间】:2021-12-23 06:12:25
【问题描述】:

我有一个这样的数据框:

> df
Person    a    b    c    d
John      1    0    1    1
James     0    1    1    0
Keith     1    0    0    0
Boris     0    1    0    0
...

并且我需要将其转换为向量列表,其中元素的名称对应于数据框的列名,列表的元素是列中有 1 的人的名称。对于上面的例子,列表应该是这样的:

> result_list
$a
[1] "John" "Keith"

$b
[1] "James" "Boris"

$c
[1] "John" "James"

$d
[1] "John"

继续我所知道的,每一列的“切换”名称的向量可以这样获得:

df$Person[which(df$a == 1)]

但我不确定如何正确地迭代它,我认为对于使用 dplyr 和 purrr 的任务可能有一个整洁的解决方案。

【问题讨论】:

    标签: r dplyr purrr


    【解决方案1】:

    我们可以重塑为“长”格式和split

    library(dplyr)
    library(tidyr)
    df %>% 
        pivot_longer(cols = -Person) %>% 
        filter(value == 1) %>% 
        {split(.$Person, .$name)}
    

    -输出

    $a
    [1] "John"  "Keith"
    
    $b
    [1] "James" "Boris"
    
    $c
    [1] "John"  "James"
    
    $d
    [1] "John"
    

    数据

    df <- structure(list(Person = c("John", "James", "Keith", "Boris"), 
        a = c(1L, 0L, 1L, 0L), b = c(0L, 1L, 0L, 1L), c = c(1L, 1L, 
        0L, 0L), d = c(1L, 0L, 0L, 0L)), class = "data.frame", row.names = c(NA, 
    -4L))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-04
      • 1970-01-01
      • 1970-01-01
      • 2015-04-16
      • 1970-01-01
      • 2015-11-14
      • 1970-01-01
      相关资源
      最近更新 更多