繁体   English   中英

合并R中非常宽的数据框中的列

[英]Merge columns within a dataframe that is very wide in R

假设我有一个数据框,如:

set.seed(123)
df<-data.frame(ID=letters[1:10],
             A1=rnorm(10),A2=rnorm(10,1,3),
             B1=rnorm(10),B2=rnorm(10,1,3),
             C1=rnorm(10),C2=rnorm(10,1,3),
             D1=rnorm(10),D2=rnorm(10,1,3),
             E1=rnorm(10),E2=rnorm(10,1,3))

我想要的是从AE中添加*1*2列。 这似乎很容易实现,但我的情况的关键问题是df非常宽,我更喜欢不输入具有列名c("ID", "A", "B", "C", "D", "E")

除了第一个('ID')之外,我们可以通过删除数字部分(使用sub )创建的列名的子字符串split 'df'的列名,使用sapply循环遍历list元素,将列的子列' df'基于索引,获取第一列的rowSumscbinddf[1]

cbind(df[1], sapply(split(names(df)[-1], sub("\\d+", "", names(df)[-1])),
                              function(x) rowSums(df[x])))
# ID          A          B          C           D           E
#1   a  4.1117697  1.2115690  1.0652486 -0.09345402  3.98627575
#2   b  1.8492640 -0.1031894  0.7064425 -6.42983008  3.03047128
#3   c  3.7610227  2.6593725 -0.3940077  3.68400819  1.34553517
#4   d  1.4025565  2.9055092  7.2747628 -2.14617767 -0.23934168
#5   e -0.5382357  2.8397040  1.5306490 -2.13581708  4.86147078
#6   f  8.0758044  1.3792275  4.4263032  4.38024275 -0.46899680
#7   g  2.9544676  3.4995400 -4.0491432  0.59389076  8.65883799
#8   h -6.1649127  0.9676380  2.2871859 -2.60914891  6.03301337
#9   i  2.4172149 -1.0560249  2.1515278  2.46617791 -0.03303266
#10  j -0.8640362  1.1124019  1.5644556  2.63341060 -0.93045508

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM