首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将列拆分为两个具有相同列名的新列

将列拆分为两个具有相同列名的新列
EN

Stack Overflow用户
提问于 2014-11-17 04:47:14
回答 2查看 213关注 0票数 1

我希望将每一列内用逗号分隔的值对分割为新数据框架内的两个相邻列,并为两列中的每一列使用相同的列名。

也就是说,我想把它转换成:

代码语言:javascript
运行
复制
A   B   C   D   E 
1,1 0,1 1,1 1,1 1,1 
1,1 1,1 1,1 1,1 1,1
0,1 0,1 0,1 0,1 0,1 

对此:

代码语言:javascript
运行
复制
A  A  B  B  C  C  D  D  E  E
1  1  0  1  1  1  1  1  1  1
1  1  1  1  1  1  1  1  1  1
0  1  0  1  0  1  0  1  0  1

如果数据帧名称不能有精确的副本,A_1和A_2.等等,应该没问题。或者,将名称放在dataframe的第一行而不是作为标题也可以。

我的实际数据集是~200列×13,000行,所以我需要一种自动的方法来分割列并为第二个版本的数据帧指定名称。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-17 04:50:41

你可以用

代码语言:javascript
运行
复制
library(splitstackshape)
(newdf <- cSplit(df, names(df), ","))
#    A_1 A_2 B_1 B_2 C_1 C_2 D_1 D_2 E_1 E_2
# 1:   1   1   0   1   1   1   1   1   1   1
# 2:   1   1   1   1   1   1   1   1   1   1
# 3:   0   1   0   1   0   1   0   1   0   1

要创建重复的列名,可以执行以下操作,因为data.table也加载了splitstackshape

代码语言:javascript
运行
复制
setnames(newdf, names(newdf), sub("_.*", "", names(newdf)))
newdf
#    A A B B C C D D E E
# 1: 1 1 0 1 1 1 1 1 1 1
# 2: 1 1 1 1 1 1 1 1 1 1
# 3: 0 1 0 1 0 1 0 1 0 1

但你要知道,有重复的列名是个糟糕的主意。

票数 7
EN

Stack Overflow用户

发布于 2014-11-17 06:05:54

我不想在这里自责,但是,随着“弦I”包的最新发展,cSplit不再为这种类型的工作拿蛋糕了。

下面是一种使用Stringi的方法(尽管它是针对这个问题的)。

首先,创建一个拆分函数:

代码语言:javascript
运行
复制
library(stringi)
Stringi <- function(indf) {
  X <- do.call(cbind, lapply(indf, stri_split_fixed, ",", simplify = TRUE))
  `dimnames<-`(`dim<-`(as.numeric(X), dim(X)), 
               list(NULL, paste0(rep(names(indf), each = 2), 1:2)))
}

第二,应用它:

代码语言:javascript
运行
复制
Stringi(df)
#      A1 A2 B1 B2 C1 C2 D1 D2 E1 E2
# [1,]  1  1  0  1  1  1  1  1  1  1
# [2,]  1  1  1  1  1  1  1  1  1  1
# [3,]  0  1  0  1  0  1  0  1  0  1

在13000行200列上,cSplit占用我的时间不到11秒,而Stringi的时间不到2.5秒。

显然,对于未来版本的上个月我的这个要点显示了 :-)使用该版本的cSplit,时间从11秒降至大约2.7秒。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26965707

复制
相关文章

相似问题

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