折叠 R 中同时包含数值和字符变量的数据帧



我有以下data.frame

data <- data.frame("ag" = rep(LETTERS[1:4],6), 
"date" = c(sapply(1:3, function(x) rep(x, 8))), 
"num_var1"= 1:24, 
"num_var2"= 24:1, 
"alpha_var1" = LETTERS[1:24], 
"alpha_var2" = LETTERS[25:2] )

我想用dplyragdate来总结(mean)它的行。问题是某些行包含字符:在这种情况下,我想按组获取第一个条目(示例数据集已经排序)。

由于我的数据集有多个条目,我希望代码能够识别变量是数字(包括整数)还是字符。但是,到目前为止,我拥有的最佳解决方案是以下解决方案:

data %>%
dplyr::group_by(ag, date) %>%
summarise(across(everything(), mean))

这将为非数字变量创建NAs。你有更好的解决方案吗?

这是你要找的吗?

library(dplyr)
data %>%
dplyr::group_by(ag, date) %>%
summarise(across(everything(), ~
if(is.numeric(.x)) mean(.x) else first(.x)))
#> `summarise()` has grouped output by 'ag'. You can override using the `.groups` argument.
#> # A tibble: 12 x 6
#> # Groups:   ag [4]
#>    ag     date num_var1 num_var2 alpha_var1 alpha_var2
#>    <chr> <int>    <dbl>    <dbl> <chr>      <chr>     
#>  1 A         1        3       22 A          Y         
#>  2 A         2       11       14 I          Q         
#>  3 A         3       19        6 Q          I         
#>  4 B         1        4       21 B          X         
#>  5 B         2       12       13 J          P         
#>  6 B         3       20        5 R          H         
#>  7 C         1        5       20 C          W         
#>  8 C         2       13       12 K          O         
#>  9 C         3       21        4 S          G         
#> 10 D         1        6       19 D          V         
#> 11 D         2       14       11 L          N         
#> 12 D         3       22        3 T          F

创建于 2022-03-03 由 reprex 软件包 (v2.0.1)

另一种可能的解决方案:

library(tidyverse)
data %>%
group_by(ag, date) %>%
summarise(across(where(is.numeric), mean), 
across(where(is.character), first), .groups = "drop")
#> # A tibble: 12 × 6
#>    ag     date num_var1 num_var2 alpha_var1 alpha_var2
#>    <chr> <int>    <dbl>    <dbl> <chr>      <chr>     
#>  1 A         1        3       22 A          Y         
#>  2 A         2       11       14 I          Q         
#>  3 A         3       19        6 Q          I         
#>  4 B         1        4       21 B          X         
#>  5 B         2       12       13 J          P         
#>  6 B         3       20        5 R          H         
#>  7 C         1        5       20 C          W         
#>  8 C         2       13       12 K          O         
#>  9 C         3       21        4 S          G         
#> 10 D         1        6       19 D          V         
#> 11 D         2       14       11 L          N         
#> 12 D         3       22        3 T          F

最新更新