tidyr gather:同时收集和重命名密钥?
tidyr gather: simultaneously gather and rename key?
假设我有以下数据框:
> a <- data_frame(my_type_1_num_widgets = c(1, 2, 3), my_type_2_num_widgets = c(4, 5, 6))
> a
Source: local data frame [3 x 2]
my_type_1_num_widgets my_type_2_num_widgets
1 1 4
2 2 5
3 3 6
我想做两件事:
- 收集 "num_widgets" 列。
- 重命名生成的键以删除 "num_widgets" 后缀。
我目前这样做的方式,以及我得到的 correct/desired 输出:
> a %>%
rename(my_type_1 = my_type_1_num_widgets,
my_type_2 = my_type_2_num_widgets) %>%
gather(type, num_widgets, my_type_1:my_type_2)
Source: local data frame [6 x 2]
type num_widgets
1 my_type_1 1
2 my_type_1 2
3 my_type_1 3
4 my_type_2 4
5 my_type_2 5
6 my_type_2 6
有没有办法一步到位?
尝试:
a %>%
gather(type, num_widgets) %>% ## gather the "num_widgets" columns
mutate(type = sub("_num_widgets", "", type)) ## remove the suffix
给出:
#Source: local data frame [6 x 2]
#
# type num_widgets
#1 my_type_1 1
#2 my_type_1 2
#3 my_type_1 3
#4 my_type_2 4
#5 my_type_2 5
#6 my_type_2 6
因为 tidyr 1.0.0 你可以做:
library(tidyverse)
a <- tibble(my_type_1_num_widgets = c(1, 2, 3), my_type_2_num_widgets = c(4, 5, 6))
pivot_longer(a, everything(),
names_to = c("type",".value"),
names_pattern = "(.*?)_(num_widgets)") %>%
arrange(type)
#> # A tibble: 6 x 2
#> type num_widgets
#> <chr> <dbl>
#> 1 my_type_1 1
#> 2 my_type_1 2
#> 3 my_type_1 3
#> 4 my_type_2 4
#> 5 my_type_2 5
#> 6 my_type_2 6
由 reprex package (v0.3.0)
于 2019-09-19 创建
假设我有以下数据框:
> a <- data_frame(my_type_1_num_widgets = c(1, 2, 3), my_type_2_num_widgets = c(4, 5, 6))
> a
Source: local data frame [3 x 2]
my_type_1_num_widgets my_type_2_num_widgets
1 1 4
2 2 5
3 3 6
我想做两件事:
- 收集 "num_widgets" 列。
- 重命名生成的键以删除 "num_widgets" 后缀。
我目前这样做的方式,以及我得到的 correct/desired 输出:
> a %>%
rename(my_type_1 = my_type_1_num_widgets,
my_type_2 = my_type_2_num_widgets) %>%
gather(type, num_widgets, my_type_1:my_type_2)
Source: local data frame [6 x 2]
type num_widgets
1 my_type_1 1
2 my_type_1 2
3 my_type_1 3
4 my_type_2 4
5 my_type_2 5
6 my_type_2 6
有没有办法一步到位?
尝试:
a %>%
gather(type, num_widgets) %>% ## gather the "num_widgets" columns
mutate(type = sub("_num_widgets", "", type)) ## remove the suffix
给出:
#Source: local data frame [6 x 2]
#
# type num_widgets
#1 my_type_1 1
#2 my_type_1 2
#3 my_type_1 3
#4 my_type_2 4
#5 my_type_2 5
#6 my_type_2 6
因为 tidyr 1.0.0 你可以做:
library(tidyverse)
a <- tibble(my_type_1_num_widgets = c(1, 2, 3), my_type_2_num_widgets = c(4, 5, 6))
pivot_longer(a, everything(),
names_to = c("type",".value"),
names_pattern = "(.*?)_(num_widgets)") %>%
arrange(type)
#> # A tibble: 6 x 2
#> type num_widgets
#> <chr> <dbl>
#> 1 my_type_1 1
#> 2 my_type_1 2
#> 3 my_type_1 3
#> 4 my_type_2 4
#> 5 my_type_2 5
#> 6 my_type_2 6
由 reprex package (v0.3.0)
于 2019-09-19 创建