使用 dplyr 的 start_with 跨特定列的行总和
rowsum across specific columns using dplyr's start_with
我正在尝试对数据集中的某些列进行聚合。我煞费苦心地组织数据,所以我想使用列名而不是索引来添加我的量表。
这是我的数据:
library(tidyverse)
data <- tibble(name = c("Ash", "Ashley", "Ashton"),
hc_1 = c(1, 2, 3),
hc_2 = c(2, 2, 2),
ur_1 = c(1, 5, 5),
ur_2 = c(3, 4, 3))
我想创建一个仅包含 hc 值的新列:
library(tidyverse)
data <- tibble(name = c("Ash", "Ashley", "Ashton"),
hc_1 = c(1, 2, 3),
hc_2 = c(2, 2, 2),
ur_1 = c(1, 5, 5),
ur_2 = c(3, 4, 3),
hc_agg = c(3, 4, 5))
我试过此代码但收到错误消息:
data %>% mutate(hc_agg = pmap_dbl(select(., starts_with("hc"))), ~rowsum)
Error in as_mapper(.f, ...) : argument ".f" is missing, with no default
同样,我知道我可以使用索引,但这个数据集可能会改变变量。我宁愿使用列名来保持安全。
谢谢!
仅使用 dplyr
,您可以:
data %>%
mutate(hc_agg = rowSums(select(., starts_with("hc"))))
name hc_1 hc_2 ur_1 ur_2 hc_agg
<chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Ash 1 2 1 3 3
2 Ashley 2 2 5 4 4
3 Ashton 3 2 5 3 5
一种方式是
data %>%
nest(starts_with("hc"), .key = "hc") %>%
mutate(hc_agg = map(hc, sum)) %>%
unnest
name ur_1 ur_2 hc_agg hc_1 hc_2
<chr> <dbl> <dbl> <dbl> <dbl> <dbl>
Ash 1 3 3 1 2
Ashley 5 4 4 2 2
Ashton 5 3 5 3 2
我正在尝试对数据集中的某些列进行聚合。我煞费苦心地组织数据,所以我想使用列名而不是索引来添加我的量表。
这是我的数据:
library(tidyverse)
data <- tibble(name = c("Ash", "Ashley", "Ashton"),
hc_1 = c(1, 2, 3),
hc_2 = c(2, 2, 2),
ur_1 = c(1, 5, 5),
ur_2 = c(3, 4, 3))
我想创建一个仅包含 hc 值的新列:
library(tidyverse)
data <- tibble(name = c("Ash", "Ashley", "Ashton"),
hc_1 = c(1, 2, 3),
hc_2 = c(2, 2, 2),
ur_1 = c(1, 5, 5),
ur_2 = c(3, 4, 3),
hc_agg = c(3, 4, 5))
我试过此代码但收到错误消息:
data %>% mutate(hc_agg = pmap_dbl(select(., starts_with("hc"))), ~rowsum)
Error in as_mapper(.f, ...) : argument ".f" is missing, with no default
同样,我知道我可以使用索引,但这个数据集可能会改变变量。我宁愿使用列名来保持安全。
谢谢!
仅使用 dplyr
,您可以:
data %>%
mutate(hc_agg = rowSums(select(., starts_with("hc"))))
name hc_1 hc_2 ur_1 ur_2 hc_agg
<chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Ash 1 2 1 3 3
2 Ashley 2 2 5 4 4
3 Ashton 3 2 5 3 5
一种方式是
data %>%
nest(starts_with("hc"), .key = "hc") %>%
mutate(hc_agg = map(hc, sum)) %>%
unnest
name ur_1 ur_2 hc_agg hc_1 hc_2
<chr> <dbl> <dbl> <dbl> <dbl> <dbl>
Ash 1 3 3 1 2
Ashley 5 4 4 2 2
Ashton 5 3 5 3 2