在R中将列标题拆分为行元素

在R中将列标题拆分为行元素,r,algorithm,packages,R,Algorithm,Packages,在使用R对较大的数据集执行数据分析后,我得到如下示例数据所示的输出: A_B C_D E_F G_H 1 1 1 0 0 2 1 0 1 1 3 1 1 0 1 4 0 0 1 1 5 1 0 1 1 6 0 0 0 1 目前,我正在尝试将列标题拆分为两个不同的列,以便它们作为元素出现在两个不同的列中,并获取它们所表示的列的总和。它看起来像这样: P1 P2 Sum 1 A

在使用R对较大的数据集执行数据分析后,我得到如下示例数据所示的输出:

   A_B C_D E_F G_H
1   1   1   0   0 
2   1   0   1   1
3   1   1   0   1
4   0   0   1   1
5   1   0   1   1
6   0   0   0   1
目前,我正在尝试将列标题拆分为两个不同的列,以便它们作为元素出现在两个不同的列中,并获取它们所表示的列的总和。它看起来像这样:

   P1  P2  Sum
1   A   B   4
2   C   D   2
3   E   F   3
4   G   H   5
对于每个列的总和,我可以直接使用
colSums()
,但是我对如何拆分列标题并使其显示为上述单元格元素感到困惑

请告诉我有关如何处理此问题的任何建议,谢谢。

生成示例数据
方法2:
tidyverse
库(tidyverse)
聚集(df1)%>%
分开(键,插入=c('P1','P2'))%>%
分组依据(P1,P2)%>%
总结(总和=总和(价值))
#一个tibble:4x3
#分组:P1[?]
#P1 P2和
#    
#1 A B 4
#2 C D 2
#3 E F 3
#4Gh5
像这样尝试
read.table(text=…)
。如果您更喜欢系数列,请省略as.is=TRUE

在下面的注释中,我们假设了一个数据帧,但是如果输入是一个矩阵,那么相同的代码应该可以工作

没有使用任何软件包

DF2 <- read.table(text = colnames(DF), sep = "_", as.is = TRUE, col.names = c("P1", "P2"))
data.frame(DF2, Sum = colSums(DF), row.names = NULL)
注:上述可复制形式的输入数据框为:

Lines <- "A_B C_D E_F G_H
1   1   1   0   0 
2   1   0   1   1
3   1   1   0   1
4   0   0   1   1
5   1   0   1   1
6   0   0   0   1"

DF <- read.table(text = Lines, header = TRUE)

Lines这是我的解决方案

library(tidyr)
library(dplyr)
df1=data.frame(melt(df))%>%group_by(variable)%>%dplyr::summarise(value=sum(value))
df2 <- separate(df1, variable, into = c("P1","P2"), sep = "_", extra = "merge")

     P1    P2 value
* <chr> <chr> <int>
1     A     B     4
2     C     D     2
3     E     F     3
4     G     H     5
library(tidyr)
图书馆(dplyr)
df1=data.frame(melt(df))%%>%groupby(variable)%%>%dplyr::summary(value=sum(value))

谢谢@akrun。您确定名称(df1)
?我在尝试strsplit(names(d1),“”):非字符参数中的方法时遇到以下错误
。上面G.Grothendieck的建议是可行的,但也想试试你的方法。@ChetanArvindPatil你有
矩阵
数据框
?如果它是
matrix
,则执行
strsplit(colnames(df1),“”)
Yes@akrun,它是
matrix
。现在它可以准确地工作了。正如我在对G.Grothendieck回答的第一个评论中所问的那样,您的方法还以表格形式提供数据输出。谢谢@GGrothendieck,您的建议有效。是否可以删除带有数字的
A_B C_D E_F G_H
行标识符,或者因为R如何处理表数据而无法删除?已修改代码的最后一行以删除X_Y行名称。
DF2 <- read.table(text = colnames(DF), sep = "_", as.is = TRUE, col.names = c("P1", "P2"))
data.frame(DF2, Sum = colSums(DF), row.names = NULL)
  P1 P2 Sum
1  A  B   4
2  C  D   2
3  E  F   3
4  G  H   5
Lines <- "A_B C_D E_F G_H
1   1   1   0   0 
2   1   0   1   1
3   1   1   0   1
4   0   0   1   1
5   1   0   1   1
6   0   0   0   1"

DF <- read.table(text = Lines, header = TRUE)
library(tidyr)
library(dplyr)
df1=data.frame(melt(df))%>%group_by(variable)%>%dplyr::summarise(value=sum(value))
df2 <- separate(df1, variable, into = c("P1","P2"), sep = "_", extra = "merge")

     P1    P2 value
* <chr> <chr> <int>
1     A     B     4
2     C     D     2
3     E     F     3
4     G     H     5