我有一个像mtcars
这样的数据帧,还有一个像c("mpg", "cyl", "disp", "hp", "drat")
这样的列名的字符串向量,我想将所有列加起来成为一个新的列。
我通常会使用
mtcars %>% transmute(new_col = mpg + cyl + disp + hp + drat)
new_col
1 300.90
2 300.90
3 231.65
4 398.48
5 564.85
6 356.86
7 630.51
但是,当向量中存储有100个列名时,这变得非常繁琐。
所以我的问题是,有没有一种方法可以将许多列汇总在一起,其中列名保存在字符串向量中?
答案 0 :(得分:5)
使用rowSums
函数。
colnms=c("mpg", "cyl", "disp", "hp", "drat")
mtcars$new_col<-rowSums(mtcars[,colnms])
答案 1 :(得分:3)
使用基本功能
mtcars$NewCol <- as.numeric(apply(mtcars[,1:5], 1, sum))
head(mtcars)
mpg cyl disp hp drat wt qsec vs am gear carb NewCol
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 300.90
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 300.90
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 231.65
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 398.48
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 564.85
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 356.86
答案 2 :(得分:2)
这是使用this.results = this.myForm.controls.myFormNameDrop.valueChanges.pipe( ...
的另一种方法:
tidyverse
此处的输出是一个数据帧,其中包含行ID(library(tidyverse)
# input columns of interest
cols = c("mpg", "cyl", "disp", "hp", "drat")
mtcars %>%
group_by(id = row_number()) %>% # for each row
nest(cols) %>% # nest selected columns
mutate(SUM = map_dbl(data, sum)) # calculate the sum of those columns
# # A tibble: 32 x 3
# id data SUM
# <int> <list> <dbl>
# 1 1 <tibble [1 x 5]> 301.
# 2 2 <tibble [1 x 5]> 301.
# 3 3 <tibble [1 x 5]> 232.
# 4 4 <tibble [1 x 5]> 398.
# 5 5 <tibble [1 x 5]> 565.
# 6 6 <tibble [1 x 5]> 357.
# 7 7 <tibble [1 x 5]> 631.
# 8 8 <tibble [1 x 5]> 241.
# 9 9 <tibble [1 x 5]> 267.
# 10 10 <tibble [1 x 5]> 320.
# # ... with 22 more rows
),每行使用的数据(id
)和计算得出的总和(data
)。
如果添加SUM
,则可以获得计算出的SUM
的向量。
答案 3 :(得分:1)
RSK的好建议
您还可以使用Apply
cols <- c('mpg','cyl','disp','hp','drat')
mtcars$new_col <- apply(mtcars[,cols],1,sum)
答案 4 :(得分:0)
两种方法之间的混合:
mtcars %>% select(cols) %>% transmute(x=rowSums(.))