我想要对以相同字符串模式开头的未定义数量的列求和.我希望我的新数据框的每一列都具有列名搜索中使用的字符串的列名.然而,我不确定如何自动分配列名,以使其产生给定的格式,例如

c(m = "m", w = "w")

我想将lApply与rowSums结合使用,如下所示:

lapply(c(m = "m", w = "w"),
                 \(x) rowSums(df[startsWith(names(df), x)]))

基本输入:

#        m_16 w_16 w_17 m_17 w_18 m_18 
#values1    3    4    8    1   12    4
#values2    8    0   12    1    3    2  

请注意,情况并非如此.

#        m_16 w_16 w_17 m_17 w_18 m_18     m     w
#values1    3    4    8    1   12    4     8    24
#values2    8    0   12    1    3    2    11    15

然而,正如我在上面提到的,可能有更多的列,它们可以从z, w, etc开始,并且还应该计算总和,所以我想将"列名指定"向量化,而不是手动分配列名.

我试过通过其他堆栈溢出线程查找它,但不确定如何搜索这个问题,也不知道自己如何解决它,除了后来分配列名.

推荐答案

假设您的第一列命名为#,其他列的命名模式类似于letter_SomethingElse.

search_pattern <- unique(gsub("(?<=^[a-z]).*", "\\1", names(df), perl = TRUE))[-1]
names(search_pattern) <- search_pattern

cbind(df, lapply(search_pattern, \(x) rowSums(df[startsWith(names(df), x)])))

退货

         # m_16 w_16 w_17 m_17 w_18 m_18  m  w
1 #values1    3    4    8    1   12    4  8 24
2 #values2    8    0   12    1    3    2 11 15

R相关问答推荐

将一个载体的值相加,直到达到另一个载体的值

查找具有平局的多个列的最大值并返回列名或平局 destruct 者NA值

单击 map 后,将坐标复制到剪贴板

计算R中的威布尔分布的EDF

R Tidymodels textercipes-使用spacyR进行标记化-如何从生成的标记列表中删除标点符号

查找图下的面积

gt()从gt为相同内容的单元格 colored颜色 不同?

使用strsplit()将向量操作为数据框

计算具有奇数日期的运行金额

par函数中的缩写,比如mgp,mar,mai是如何被破译的?

为了网络分析目的,将数据框转换为长格式列联表

Select 季度月值

以字符格式导入的ExcelElectron 表格日期列标题

Geom_Hline将不会出现,而它以前出现了

是否有新方法来更改Facet_WRAP(Ggplot2)中条文本的文本 colored颜色 ?

创建列并对大型数据集中的特定条件进行成对比较的更高效程序

R代码,用于在线条图下显示观测表

使用geom_sf跨越日期线时的闭合边界

具有由向量定义的可变步长的序列

识别部分重复行,其中一行为NA,其重复行为非NA