【问题标题】:Convert specific number of rows to columns in R and repeat the process for a large dataset将特定数量的行转换为 R 中的列,并对大型数据集重复该过程
【发布时间】:2018-04-25 18:24:32
【问题描述】:

我有一个包含 1500 万行的单列数据集。看起来,

x_raw
A1
A2
A3
A4
B1
B2
B3
B4
C1
C2

I want to convert it to

A1 A2 A3 A4
B1 B2 B3 B4
C1 C2 C3 C4

我正在尝试使用“for”循环,它将每 4 行转置一次,并将它们添加到“最终”数据帧中,但由于数据集太大,它会迭代近 270 万次,这是行不通的有效率的。有没有其他方法或任何东西可以用来有效地做到这一点?

【问题讨论】:

  • 初始示例中没有C3C4
  • @akrun 数据就是这样...... C 和 D 等等......多达 1500 万行......
  • 如果它每四行不会更快地将向量转换为矩阵?
  • @zacdav 是的...我是在看到 cmets 后才知道的。我是新手所以... :)

标签: r dataframe bigdata large-data


【解决方案1】:

这是tidyverse 的一个选项,其中separate 'x_raw' 分为两列,然后spread 为'wide' 格式

library(dplyr)
library(tidyr)
separate(df1, x_raw, into = c('x', 'rn'), sep="(?=\\d+)", remove = FALSE) %>%
       spread(rn, x_raw) %>% 
       select(-x)
#   1  2    3    4
#1 A1 A2   A3   A4
#2 B1 B2   B3   B4
#3 C1 C2 <NA> <NA>

或者如果元素个数总是4,那么我们也可以这样做

as.data.frame(matrix(df1$x_raw, ncol =4, byrow = TRUE), stringsAsFactors=FALSE)

【讨论】:

    【解决方案2】:

    如果您只想转换为四列数据框:

    as.data.frame(matrix(df$x_raw,ncol=4,byrow = T))
    

    【讨论】:

      【解决方案3】:

      看到这个,

      x_raw <- c("A1","A2","A3","A4","B1","B2","B3","B4","C1","C2","C3","C4","D1","D2","D3","D4")
      x <- as.table(matrix(x_raw,ncol=4,byrow = T))
      rownames(x) <- NULL
      colnames(x) <- NULL
      print(x)
      

      返回:

           [,1] [,2] [,3] [,4]
      [1,] A1   A2   A3   A4
      [2,] B1   B2   B3   B4  
      [3,] C1   C2   C3   C4 
      [4,] D1   D2   D3   D4
      

      【讨论】:

        【解决方案4】:

        将长度扩展到下一个 4 个值的块,并将其放入矩阵中:

        matrix(`length<-`(dat$x_raw, (nrow(dat) %/% 4 + 1) * 4), ncol=4, byrow=TRUE)
        
        #     [,1] [,2] [,3] [,4]
        #[1,] "A1" "A2" "A3" "A4"
        #[2,] "B1" "B2" "B3" "B4"
        #[3,] "C1" "C2" NA   NA
        

        【讨论】:

        • 我不确定将其纳入一行的努力是否容易理解
        猜你喜欢
        • 2014-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-10
        • 2013-04-12
        • 2018-01-25
        • 2018-12-15
        • 2022-01-10
        相关资源
        最近更新 更多