首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将特定行数转换为R中的列,然后对大型数据集重复此过程

将特定行数转换为R中的列,然后对大型数据集重复此过程
EN

Stack Overflow用户
提问于 2017-11-13 14:12:42
回答 4查看 56关注 0票数 0

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

代码语言:javascript
运行
复制
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行转置一次,并将它们添加到'final’数据帧中,但由于数据集太大,它将迭代近270万次,效率不是很高。有没有其他方法或东西可以让我更有效地做这件事?

EN

回答 4

Stack Overflow用户

发布于 2017-11-13 14:17:19

这是tidyverse的一种选择,它将“separate”“x_raw”分成两列,然后将其转换为“spread”格式

代码语言:javascript
运行
复制
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,那么我们也可以这样做

代码语言:javascript
运行
复制
as.data.frame(matrix(df1$x_raw, ncol =4, byrow = TRUE), stringsAsFactors=FALSE)
票数 2
EN

Stack Overflow用户

发布于 2017-11-13 14:20:24

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

代码语言:javascript
运行
复制
as.data.frame(matrix(df$x_raw,ncol=4,byrow = T))
票数 2
EN

Stack Overflow用户

发布于 2017-11-13 19:35:39

看看这个,

代码语言:javascript
运行
复制
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)

它返回:

代码语言:javascript
运行
复制
     [,1] [,2] [,3] [,4]
[1,] A1   A2   A3   A4
[2,] B1   B2   B3   B4  
[3,] C1   C2   C3   C4 
[4,] D1   D2   D3   D4
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47258091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档