【问题标题】:Is there any R function which can convert binary data to column? [duplicate]是否有任何可以将二进制数据转换为列的 R 函数? [复制]
【发布时间】:2021-08-15 06:41:36
【问题描述】:

我有一个如下所示的数据框:

number A B C D
0.3 0 1 0 1
0.4 1 1 1 0

我想要这个数据框:

number category
0.3 B
0.3 D
0.4 A
0.4 B
0.4 C

有什么方法或功能可以帮助我做到这一点吗?

【问题讨论】:

    标签: r dataframe function


    【解决方案1】:

    你可以使用pivot_longer获取长格式数据,filter获取不为0的值。

    library(dplyr)
    library(tidyr)
    
    df %>%
      pivot_longer(cols = -number, 
                   names_to = 'category') %>%
      filter(value != 0) %>%
      select(-value)
    
    # number category
    #   <dbl> <chr>   
    #1    0.3 B       
    #2    0.3 D       
    #3    0.4 A       
    #4    0.4 B       
    #5    0.4 C       
    

    数据

    如果您以可重现的格式提供数据,则更容易提供帮助。

    df <- structure(list(number = c(0.3, 0.4), A = 0:1, B = c(1L, 1L), 
        C = 0:1, D = 1:0), row.names = c(NA, -2L), class = "data.frame")
    

    【讨论】:

    • 这正是我想要的。非常感谢。你说得对,我不得不使用可重现的数据。
    【解决方案2】:

    这是另一种策略:

    1. 为具有acrosscase_when 的列赋值
    2. 删除带有.keep="unused"number
    3. 移除 NA 的
    library(dplyr)
    librayr(tidyr)
    
    df %>% 
        mutate(across(A:D, ~case_when(. == 1 ~ as.numeric(number))), .keep="unused") %>% 
        pivot_longer(
            cols = A:D, 
            names_to = "category",
            values_to = "number"
        ) %>% 
        na.omit()
    

    输出:

    # A tibble: 5 x 2
      category number
      <chr>     <dbl>
    1 B           0.3
    2 D           0.3
    3 A           0.4
    4 B           0.4
    5 C           0.4
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-30
      • 1970-01-01
      • 2020-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      相关资源
      最近更新 更多