使用 Pivot_Longer() 和 Pivot_Wider (Tidyverse) 调换 Tibble [英] Transposition of a Tibble Using Pivot_Longer() and Pivot_Wider (Tidyverse)

查看:39
本文介绍了使用 Pivot_Longer() 和 Pivot_Wider (Tidyverse) 调换 Tibble的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

关于此主题的类似问题都使用了已退休的 Tidyverse 函数 spread() 和 gather().假设我有一个这样的小标题:

The similar questions on this topic all used spread() and gather() which are retired Tidyverse functions. Let's say I have a tibble as such:

people   1      2     3.    4     5
person1 27000 30000 40000 50000 60000
person2 27000 30000 40000 50000 60000
person3 27000 30000 40000 50000 60000
person4 27000 30000 40000 50000 60000

我想这样转置

People Person1 Person2 Person3 Person4 Person5
1.      270000  270000  270000. 270000. 270000
2.      30000.  30000. 30000  30000. 30000
3
4
5.     60000.   60000.  60000 60000 60000

(没有填写第三和第四列只是为了节省我自己的时间,但他们应该已经填写了.

(Didn't fill the third and fourth columns just to save myself time, but they should have been filled.

推荐答案

使用 data.table::transpose

library(data.table)
data.table::transpose(setDT(df1), make.names = 'people')[, People := .I][]


或使用 tidyverse,转置可以分两步完成,1),使用 pivot_longer 重新整形为长格式,2) 使用不同的列重新整形为宽使用 pivot_wider


or with tidyverse, the transpose can be done in two steps, 1), reshape to long format with pivot_longer, 2) reshape back to wide with a different column with pivot_wider

library(dplyr)
library(tidyr)
df1 %>%
   pivot_longer(cols = -people, names_to = 'People') %>% 
   pivot_wider(names_from = people, values_from = value)
# A tibble: 5 x 5
#  People person1 person2 person3 person4
#  <chr>    <int>   <int>   <int>   <int>
#1 1        27000   27000   27000   27000
#2 2        30000   30000   30000   30000
#3 3        40000   40000   40000   40000
#4 4        50000   50000   50000   50000
#5 5        60000   60000   60000   60000

数据

df1 <- structure(list(people = c("person1", "person2", "person3", "person4"
), `1` = c(27000L, 27000L, 27000L, 27000L), `2` = c(30000L, 30000L, 
30000L, 30000L), `3` = c(40000L, 40000L, 40000L, 40000L), `4` = c(50000L, 
50000L, 50000L, 50000L), `5` = c(60000L, 60000L, 60000L, 60000L
)), class = "data.frame", row.names = c(NA, -4L))

这篇关于使用 Pivot_Longer() 和 Pivot_Wider (Tidyverse) 调换 Tibble的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆