在R中将列标题拆分为行元素
在使用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
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