r - R中的pivot_wider具有多列,但将以前变量的名称保留在单独的列中
问题描述
假设我希望通过不同的 setosa-ID 将数据以宽格式放置。
iris2 <- iris %>%
head(10) %>%
mutate(num = 1:10,
ID = str_c(Species,1:10))
Sepal.Length Sepal.Width Petal.Length Petal.Width Species num ID
1 5.1 3.5 1.4 0.2 setosa 1 setosa1
2 4.9 3.0 1.4 0.2 setosa 2 setosa2
3 4.7 3.2 1.3 0.2 setosa 3 setosa3
4 4.6 3.1 1.5 0.2 setosa 4 setosa4
5 5.0 3.6 1.4 0.2 setosa 5 setosa5
6 5.4 3.9 1.7 0.4 setosa 6 setosa6
7 4.6 3.4 1.4 0.3 setosa 7 setosa7
8 5.0 3.4 1.5 0.2 setosa 8 setosa8
9 4.4 2.9 1.4 0.2 setosa 9 setosa9
10 4.9 3.1 1.5 0.1 setosa 10 setosa10
但是,pivot_wider 为结果返回某种对角矩阵
iris3 <- iris2 %>%
pivot_wider(names_from = ID,
values_from = c(Sepal.Length,Sepal.Width,Petal.Length,Petal.Width))
Species num Sepal.Length_se~ Sepal.Length_se~ Sepal.Length_se~ Sepal.Length_se~ Sepal.Length_se~ Sepal.Length_se~
<fct> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 setosa 1 5.1 NA NA NA NA NA
2 setosa 2 NA 4.9 NA NA NA NA
3 setosa 3 NA NA 4.7 NA NA NA
4 setosa 4 NA NA NA 4.6 NA NA
5 setosa 5 NA NA NA NA 5 NA
6 setosa 6 NA NA NA NA NA 5.4
我希望数据变成这样:
iris_want <- tibble("Species" = rep("setosa",40),
"num" = rep(1:10,each=4),
"Values_From" = rep(c("Sepal.Length","Sepal.Width","Petal.Length","Petal.Width"),10),
"setosa1" = NA,
"setosa2" = NA
)
Species num Values_From setosa1 setosa2
<chr> <int> <chr> <lgl> <lgl>
1 setosa 1 Sepal.Length NA NA
2 setosa 1 Sepal.Width NA NA
3 setosa 1 Petal.Length NA NA
4 setosa 1 Petal.Width NA NA
5 setosa 2 Sepal.Length NA NA
6 setosa 2 Sepal.Width NA NA
7 setosa 2 Petal.Length NA NA
8 setosa 2 Petal.Width NA NA
9 setosa 3 Sepal.Length NA NA
10 setosa 3 Sepal.Width NA NA
我该如何解决这个问题?
解决方案
也许这可以帮助:
library(dplyr)
library(tidyr)
#Code
#Code
iris2 %>% pivot_longer(-c(Species,num,ID)) %>%
pivot_wider(names_from = ID,values_from=value)
输出:
# A tibble: 40 x 13
Species num name setosa1 setosa2 setosa3 setosa4 setosa5 setosa6 setosa7 setosa8
<fct> <int> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 setosa 1 Sepa~ 5.1 NA NA NA NA NA NA NA
2 setosa 1 Sepa~ 3.5 NA NA NA NA NA NA NA
3 setosa 1 Peta~ 1.4 NA NA NA NA NA NA NA
4 setosa 1 Peta~ 0.2 NA NA NA NA NA NA NA
5 setosa 2 Sepa~ NA 4.9 NA NA NA NA NA NA
6 setosa 2 Sepa~ NA 3 NA NA NA NA NA NA
7 setosa 2 Peta~ NA 1.4 NA NA NA NA NA NA
8 setosa 2 Peta~ NA 0.2 NA NA NA NA NA NA
9 setosa 3 Sepa~ NA NA 4.7 NA NA NA NA NA
10 setosa 3 Sepa~ NA NA 3.2 NA NA NA NA NA
# ... with 30 more rows, and 2 more variables: setosa9 <dbl>, setosa10 <dbl>
推荐阅读
- php - php登录不会在服务器上重定向
- excel - 按下 Enter 键时如何防止光标移动到下一个文本框?
- jquery - 在 jquery ajax 中的某些内容上显示和隐藏 gif 图像
- python - 在python中生成一个不重复的随机数而不给出范围
- palantir-foundry - 如果我们需要使用 magrite 代理进行两步休息 api 调用?怎么走一样?
- haskell - 递归解决有关访问无限列表的某些元素的问题
- javascript - 悬停在其他元素下方的元素可能悬停
- vue.js - Gitlab CI / Pipelines 中忽略了 VueJS Webpack 别名
- emacs - emacs 在 gud 调试命令上保存所有缓冲区
- julia - Julia 中的类型错误