r - tidyr 传播来自两列的值(并重命名列)
问题描述
我正在尝试构建来自R-tidyr-mutate 的代码并传播多个列,如果这与其他帖子是多余的,我很抱歉,如果它们在那里,我将不胜感激!
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
我意识到我想要的输出会产生更多的行,就像上面的传播一样,但这没关系!
解决方案
我们可以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
推荐阅读
- c++ - 读取文件时检测到堆栈粉碎
- gradle - Depite 命令退出任务未在容器管道中的 Devops 管道中结束
- combobox - 识别被选中的组合框
- r - 如何使用 rep 复制 R 中的值?
- java - 如何在不使用 Java 中的数组或字符串的情况下读取和输出字符?
- typescript - Vue - TypeScript - SFC - 未定义属性或方法
- amazon-web-services - OpenVINO 可以与 AWS Lambda 一起使用吗?
- php - 查询不保存数据到数据库
- python - 出现错误:FileNotFoundError:[Errno 2] 尽管文件在位置可用,但 spyder 中没有这样的文件或目录
- python - 使用 tf.keras 中实现的自定义指标加载 keras 模型