【问题标题】:Combine into dataframe R, allowing NA, not using loop合并到数据帧 R 中,允许 NA,不使用循环
【发布时间】:2019-05-07 14:29:41
【问题描述】:

这是我想要实现的一个示例。我在 R 中使用 for 循环。但是,我想摆脱它,因为它在大数据上太慢了。当输出是更大的数据帧(例如,>1000 列和行)时,有什么更好的方法仍然可以快速运行?

df <- data.frame(id=c('a', 'a', 'b', 'c', 'c', 'c'), code=c(1,2,3,3,1,2), stringsAsFactors = F)
uid <- unique(df$id)
out <- NULL
df

  id code
1  a    1
2  a    2
3  b    3
4  c    3
5  c    1
6  c    2

for (i in uid){
  z <- t(df[df$id==i,])
  colnames(z) <- z[2,]
  z <- as.data.frame(z[2, , drop = FALSE])
  out <- bind_rows(out, z)
}
out  

     1    2    3
1    1    2 <NA>
2 <NA> <NA>    3
3    1    2    3

【问题讨论】:

    标签: r loops dataframe


    【解决方案1】:

    这够快吗?

    library(reshape2)
    
    dcast(df,id~code)
    

    【讨论】:

      【解决方案2】:

      我们可以使用complete 和spread

      library(dplyr)
      library(tidyr)
      
      df %>%
        mutate(code1 = code) %>%
        complete(id, code) %>%
        spread(code, code1)
      
      # A tibble: 3 x 4
      #  id      `1`   `2`   `3`
      #  <chr> <dbl> <dbl> <dbl>
      #1 a         1     2    NA
      #2 b        NA    NA     3
      #3 c         1     2     3
      

      【讨论】:

        猜你喜欢
        • 2021-07-21
        • 2011-08-23
        • 1970-01-01
        • 2020-08-17
        • 2017-03-21
        • 1970-01-01
        • 2021-09-26
        • 2023-04-04
        • 1970-01-01
        相关资源
        最近更新 更多