将多列转换为宽格式

Convert multiple columns into wide format

提问人:TheBoomerang 提问时间:5/2/2023 最后编辑:zx8754TheBoomerang 更新时间:5/2/2023 访问量:55

问:

我有一个关于将数据转换为宽格式的最佳方法的问题,并希望以一种可以理解的方式提出这个问题。请考虑以下代码:

day <- c("mon", "tues", "wed", "thur")
hours <- c(2, 4, 6, 8)
cost <- c(100, 200, 300, 400)

df <- data.frame(day, hours, cost)

在我制作的这个数据帧中,该表采用 4x3 格式。我想将其转换为 2x4 格式。请考虑下面的代码,看看我想转换为的格式:

type <- c("hours", "cost")
mon <- c(2, 100)
tues <- c(4, 200)
wed <- c(6, 300)
thur <- c(8, 400)

df1 <- data.frame(type, mon, tues, wed, thur)

我试过使用更宽的枢轴,但我猜我在这里有点偏离了目标。任何解决方案将不胜感激

r tidyverse 变换

评论


答:

3赞 akrun 5/2/2023 #1

尝试使用data.table::transpose

data.table::transpose(df, make.names = 'day', keep.names = 'type')

-输出

   type mon tues wed thur
1 hours   2    4   6    8
2  cost 100  200 300  400

使用 ,做一个pivot_longer,然后用 重塑为宽tidyversepivot_wider

library(dplyr)
library(tidyr)
df %>% 
 pivot_longer(cols = -day, names_to = 'type') %>% 
 pivot_wider(names_from = day, values_from = value)

-输出

# A tibble: 2 × 5
  type    mon  tues   wed  thur
  <chr> <dbl> <dbl> <dbl> <dbl>
1 hours     2     4     6     8
2 cost    100   200   300   400