首页 > 解决方案 > 通过包含字符串的变量跨行变异或汇总

问题描述

我想创建一个新的数据表,它是包含字符串的变量的行总和。我一直在尝试使用 new dplyr 将其作为菜鸟保留在 tidyverse 中across。非常感谢帮助。

dat<- data.frame("Image" = c(1,2,3,4), 
                 "A" = c(1,2,3,4),
                 "A:B"= c(5,6,7,8),
                 "A:B:C"= c(9,10,11,12))

获得包含“A”、“B”或“C”的变量行的总和。

datsums<- data.frame("Image" = c(1,2,3,4),
                     "Asum"= c(15,18,21,24),
                     "Bsum"=c(14,16,18,20),
                     "Csum"=c(9,10,11,12))

我使用较新的 dplyr 动词没有成功:

datsums<- dat %>% summarise(across(str_detect("A")), sum, .names ="Asum",
across(str_detect("B")), sum, .names="Bsum",
across(str_detect("C")), sum, .names"Csum")

标签: rdplyrsummarize

解决方案


使用pivot_longerpivot_wider

library(tidyverse)

dat %>% 
  pivot_longer(-Image) %>% 
  separate_rows(name, sep = "\\.") %>% 
  pivot_wider(Image,
              names_from = name,
              values_from = value, 
              values_fn = sum, 
              names_prefix = "sum")
#> # A tibble: 4 x 4
#>   Image  sumA  sumB  sumC
#>   <dbl> <dbl> <dbl> <dbl>
#> 1     1    15    14     9
#> 2     2    18    16    10
#> 3     3    21    18    11
#> 4     4    24    20    12

reprex 包(v0.3.0)于 2020-12-07 创建


推荐阅读