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