【问题标题】:convert long data with mutually non-exclusive categories into wide format将具有相互非排他类别的长数据转换为宽格式
【发布时间】:2020-09-11 17:05:53
【问题描述】:
a1 <- data.frame(id=c(1,1,1,1,2,2,2,3,3),
                 var=c("A",NA,NA,"B","B","B",NA,NA,NA))

desired_1 <- data.frame(id=c(1,2,3),
                      A=c(T,NA,NA),
                      B=c(T,T,NA),
                      None=c(NA,NA,T))

desired_2 <- data.frame(id=c(1,1,2,3),
                        type=c("A","B","B","None"))

使用data.tabledplyr 生成desired_1desired_2 的最有效方法是什么?

【问题讨论】:

  • 您的a1 正确吗?
  • 相信你想以desired_2为终极目标
  • @akrun--是的,可以随时将其转换为更广泛的形式

标签: r dplyr data.table


【解决方案1】:

我们可以通过 'id' 与 summarise 进行分组以得到 'None' if 'var' 中的所有元素是 NAelse 返回 unique 的非 NA 元素变量'

library(dplyr)
a1 %>%
   group_by(id) %>%
   summarise(var = if(all(is.na(var))) "None" else unique(var[!is.na(var)]) )
# A tibble: 4 x 2
# Groups:   id [3]
#     id var  
#  <dbl> <chr>
#1     1 A    
#2     1 B    
#3     2 B    
#4     3 None 

或使用data.table

library(data.table)
setDT(a1)[, .(var = if(all(is.na(var))) "None" else unique(var[!is.na(var)])), id]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-25
    • 1970-01-01
    • 1970-01-01
    • 2015-07-18
    • 1970-01-01
    相关资源
    最近更新 更多