使用dplyr通过名称省略列来计算行和

时间:2016-09-20 15:34:42

标签: r dplyr

使用dplyr,我想计算所有列中的行总和。 我设法通过使用列索引来做到这一点。 但是,我想使用列名而不是列索引。 我怎么能这样做?

示例数据:

# Using dplyr 0.5.0
library(tidyverse)

# Create example data
`UrbanRural` <- c("rural", "urban")
type1 <- c(1582, 671)
type2 <- c(5247, 4123)
type3 <- c(87, 65)
df <- data.frame(`UrbanRural`, type1, type2, type3)
df <- tbl_df(df)
# A tibble: 2 x 5
  UrbanRural type1 type2 type3   tot
      <fctr> <dbl> <dbl> <dbl> <dbl>
  1    rural  1582  5247    87  6916
  2    urban   671  4123    65  4859

有效的示例(使用列索引):

df %>% mutate(tot = rowSums(.[-1]))
# A tibble: 2 x 5
  UrbanRural type1 type2 type3   tot
      <fctr> <dbl> <dbl> <dbl> <dbl>
1      rural  1582  5247    87  6916
2      urban   671  4123    65  4859

我想做的例子:

df %>% mutate(tot = rowSums(select(., -UrbanRural)))

1 个答案:

答案 0 :(得分:5)

我们可以使用setdiff来选择除“UrbanRural”之外的列

df %>%
   mutate(tot = rowSums(.[setdiff(names(.), "UrbanRural")]))
#   UrbanRural type1 type2 type3   tot
#       <fctr> <dbl> <dbl> <dbl> <dbl>
#1      rural  1582  5247    87  6916
#2      urban   671  4123    65  4859

如果我们想使用select

df %>% 
   select(-one_of("UrbanRural")) %>% 
   rowSums() %>% 
   cbind(df, tot = .) 
#   UrbanRural type1 type2 type3   tot
# 1      rural  1582  5247    87  6916
# 2      urban   671  4123    65  4859