r - 等于某个值的 R 列名称向量

标签 r string lapply names rowsum

我想对以相同字符串模式开头的未定义数量的列进行求和。我希望新数据框的每一列都有列名称搜索中使用的字符串的列名称。但是,我不确定如何自动分配列名称,这将导致给定的格式,例如

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 等开头,并且还应该计算总和,所以我想对“列名称”进行矢量化给予”,而不是手动分配列名称。

我尝试通过其他 stackoverflow 线程寻找它,但不知道如何搜索这个问题,也不知道如何自己解决它,除了事后分配列名称。

最佳答案

假设您的第一列名为 #,其他列以 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 - 等于某个值的 R 列名称向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74476146/

相关文章:

python - "Find the longest substring with k-unique characters"的时间复杂度?

r - 从 lapply 抑制 Rmarkdown 中的列表符号

r - 组合数据框行

python - 将邻接矩阵转换为 Cytoscape 的边缘列表(csv 文件)

r - 什么是永久设置 R 工作目录的万无一失的方法?

带有标准输入的 C++ 字符数组

string - 如何将子功能应用于数据框?

r - 将两个因素合二为一?

r - fread 内存使用量远大于文件

java - 如何使用Java正则表达式匹配既不包含A也不包含B的字符串?