提问人:TheBoomerang 提问时间:4/26/2023 最后编辑:benson23TheBoomerang 更新时间:4/26/2023 访问量:50
如何以逐行方式对值求和,并始终选择除 R 中的第一列之外的所有列
How to sum values in a row wise fashion and always selecting all columns apart from first in R
问:
有没有办法在不显式键入列名的情况下选择列数。这更多是为了自动化目的。请考虑以下代码
a <- c("people", "contracts", "design")
b <- as.numeric(c(1,2,3))
c <- as.numeric(c(2,3,4))
d <- as.numeric(c(5,6,7))
df <- data.frame(cbind(a, b, c, d))
df$b <- as.numeric(df$b)
df$c <- as.numeric(df$c)
df$d <- as.numeric(df$d)
library(dplyr)
df %>%
rowwise() %>%
mutate(total = sum(b, c, d))
在此示例中,我以逐行方式添加了列 b、c 和 d 的值。 在以后的出口中,会有e、f、g等列。
有没有更好的方法来执行此操作,这样我就不必单独键入列,假设从“b”开始的所有列都将始终是数字。只有 A 列是一个字符。
答:
1赞
akrun
4/26/2023
#1
我们可以使用并自动检测数字列c_across
library(dplyr)# version >= 1.1.0
df %>%
rowwise %>%
mutate(total = sum(c_across(where(is.numeric)))) %>%
ungroup
最好使用rowSums
sum
rowwise
df %>%
mutate(total = rowSums(pick(where(is.numeric)), na.rm = TRUE))
a b c d total
1 people 1 2 5 8
2 contracts 2 3 6 11
3 design 3 4 7 14
2赞
benson23
4/26/2023
#2
如果您确定将始终排除第一列,则可以使用单个列。rowSums
df$Total <- rowSums(df[, -1])
a b c d Total
1 people 1 2 5 8
2 contracts 2 3 6 11
3 design 3 4 7 14
下一个:将多列转换为宽格式
评论
data.frame(cbind(a, b, c, d))
cbind