我有一个类似的数据框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
Run Code Online (Sandbox Code Playgroud)
但是,如果您有一个存储在向量中的100个列名,这将变得非常繁琐.
所以我的问题是,有没有一种方法可以将许多列汇总在一起,列名称保存在字符串向量中?
这是使用的替代方法 tidyverse:
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
Run Code Online (Sandbox Code Playgroud)
这里的输出是一个包含行 id ( id)的数据框,每行使用的数据 (data ) 和计算出的总和 ( SUM)。
SUM如果添加 ,您可以获得计算的向量... %>% pull(SUM)。
小智 7
使用 Base 函数应用
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
Run Code Online (Sandbox Code Playgroud)
使用rowSums功能.
colnms=c("mpg", "cyl", "disp", "hp", "drat")
mtcars$new_col<-rowSums(mtcars[,colnms])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5150 次 |
| 最近记录: |