[英]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'基于索引,获取第一列的rowSums
和cbind
( df[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.