gpt4 book ai didi

r - 使用 Pivot_Longer() 和 Pivot_Wider (Tidyverse) 调换 Tibble

转载 作者:行者123 更新时间:2023-12-04 13:12:48 25 4
gpt4 key购买 nike

关于这个主题的类似问题都使用了 spread() 和 gather() ,它们是退休的 Tidyverse 函数。假设我有一个这样的tibble:

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
(没有填写第三和第四列只是为了节省我自己的时间,但他们应该已经填写了。

最佳答案

使用 data.table::transpose 更容易

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

或与 tidyverse , 转置可以分两步完成, 1), 用 pivot_longer 整形为长格式, 2) 使用 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))

关于r - 使用 Pivot_Longer() 和 Pivot_Wider (Tidyverse) 调换 Tibble,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63345682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com