tidyr spread values 来自两列的值(并重命名列)
tidyr spread values values from two columns (and rename columns)
我正在尝试基于 的代码构建,如果这与其他帖子多余,我很抱歉,如果这些帖子在那里,我将不胜感激!
example <- data.frame(category = c("a", "b", "c", "a", "b", "c", "a", "b", "c"),
value1 = c(1,2,3,4,5,6,7,8,9),
value2 = c(10,20,30,40,50,60,70,80,90))
category value1 value2
1 a 1 10
2 b 2 20
3 c 3 30
4 a 4 40
5 b 5 50
6 c 6 60
7 a 7 70
8 b 8 80
9 c 9 90
我了解如何转换它以从 value1
或 value2
中获取值
example %>%
spread(category, value1)
value2 a b c
1 10 1 NA NA
2 20 NA 2 NA
3 30 NA NA 3
4 40 4 NA NA
5 50 NA 5 NA
6 60 NA NA 6
7 70 7 NA NA
8 80 NA 8 NA
9 90 NA NA 9
但我想
更改类别列的名称以反映 1 和 2 值,因此每个类别有两列
- 根据
values_from
= value1
或 value2
填充列值
a_v1 a_v2 b_v1 b_v2 c_v1 c_v2
1 10 2 20 3 30
4 40 5 50 6 60
7 70 8 80 9 90
我意识到我想要的输出会产生更多带有 NA 的行,就像上面的传播一样,但没关系!
我们可以在'category'创建序列列后使用pivot_wider
。由于 pivot_wider
可以采用多个 value_from
列将其作为向量传递,引用或不引用
library(dplyr)
library(tidyr)
example %>%
group_by(category) %>%
mutate(rn = row_number()) %>%
ungroup %>%
pivot_wider(names_from = category, values_from = c(value1, value2))
# A tibble: 3 x 7
# rn value1_a value1_b value1_c value2_a value2_b value2_c
# <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 1 1 2 3 10 20 30
#2 2 4 5 6 40 50 60
#3 3 7 8 9 70 80 90
library(dplyr)
library(tidyr)
example %>%
pivot_wider(names_from = category,
values_from = c(value1, value2)) %>%
unnest()
我正在尝试基于
example <- data.frame(category = c("a", "b", "c", "a", "b", "c", "a", "b", "c"),
value1 = c(1,2,3,4,5,6,7,8,9),
value2 = c(10,20,30,40,50,60,70,80,90))
category value1 value2
1 a 1 10
2 b 2 20
3 c 3 30
4 a 4 40
5 b 5 50
6 c 6 60
7 a 7 70
8 b 8 80
9 c 9 90
我了解如何转换它以从 value1
或 value2
example %>%
spread(category, value1)
value2 a b c
1 10 1 NA NA
2 20 NA 2 NA
3 30 NA NA 3
4 40 4 NA NA
5 50 NA 5 NA
6 60 NA NA 6
7 70 7 NA NA
8 80 NA 8 NA
9 90 NA NA 9
但我想
更改类别列的名称以反映 1 和 2 值,因此每个类别有两列
- 根据
values_from
=value1
或value2
填充列值
- 根据
a_v1 a_v2 b_v1 b_v2 c_v1 c_v2
1 10 2 20 3 30
4 40 5 50 6 60
7 70 8 80 9 90
我意识到我想要的输出会产生更多带有 NA 的行,就像上面的传播一样,但没关系!
我们可以在'category'创建序列列后使用pivot_wider
。由于 pivot_wider
可以采用多个 value_from
列将其作为向量传递,引用或不引用
library(dplyr)
library(tidyr)
example %>%
group_by(category) %>%
mutate(rn = row_number()) %>%
ungroup %>%
pivot_wider(names_from = category, values_from = c(value1, value2))
# A tibble: 3 x 7
# rn value1_a value1_b value1_c value2_a value2_b value2_c
# <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 1 1 2 3 10 20 30
#2 2 4 5 6 40 50 60
#3 3 7 8 9 70 80 90
library(dplyr)
library(tidyr)
example %>%
pivot_wider(names_from = category,
values_from = c(value1, value2)) %>%
unnest()