【问题标题】:Pivot Wider in R在 R 中更宽地旋转
【发布时间】:2020-08-13 19:46:15
【问题描述】:

我有一个这样的数据框

rest_id task_name quarter nc
123     labeling  1       TRUE
123     labeling  2       FALSE
123     labeling  3       FALSE
123     labeling  4       FALSE
123     cooking   1       TRUE
123     cooking   2       FALSE
123     cooking   3       TRUE
123     cooking   4       FALSE
123     cleaning  1       TRUE
123     cleaning  2       FALSE
123     cleaning  3       TRUE
123     cleaning  4       FALSE

我想让它看起来像这样

rest_id quarter labeling  cooking  cleaning
123     1       TRUE      TRUE     TRUE
123     2       FALSE     FALSE    FALSE
123     3       FALSE     TRUE     TRUE
123     4       FALSE     FALSE    FALSE

我试过了:

X <- pivot_wider(df,
                 names_from = task_name,
                 values_from = nc,
                 values_fill = list(nc=F))

但这并没有给我预期的输出..有人可以帮助我吗?

【问题讨论】:

  • 我无法重现该问题。即使将该列名称“task_name”创建为向量,它也对我有用,因为该函数首先在直接环境中查找对象,即数据本身,而不是父环境,即 .GlobalEnv。
  • 是否基于相同的数据,您有问题。你能试试我帖子里的数据吗?最好使用dput,这样结构就变得清晰可重复。此外,当您说它没有提供预期的输出时。你得到什么输出

标签: r tidyverse


【解决方案1】:

我们不需要为宽格式创建列名向量。 names_from 正在从数据集中的“task_name”列中进行选择,并根据该列的唯一值创建宽列名称

library(dplyr)
library(tidyr)
df %>%
   pivot_wider(names_from = task_name, values_from = nc, 
           values_fill = list(nc = FALSE))
# A tibble: 4 x 5
#  rest_id quarter labeling cooking cleaning
#    <int>   <int> <lgl>    <lgl>   <lgl>   
#1     123       1 TRUE     TRUE    TRUE    
#2     123       2 FALSE    FALSE   FALSE   
#3     123       3 FALSE    TRUE    TRUE    
#4     123       4 FALSE    FALSE   FALSE   

数据

df <- structure(list(rest_id = c(123L, 123L, 123L, 123L, 123L, 123L, 
123L, 123L, 123L, 123L, 123L, 123L), task_name = c("labeling", 
"labeling", "labeling", "labeling", "cooking", "cooking", "cooking", 
"cooking", "cleaning", "cleaning", "cleaning", "cleaning"), quarter = c(1L, 
2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L), nc = c(TRUE, FALSE, 
FALSE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE
)), class = "data.frame", row.names = c(NA, -12L))

【讨论】:

  • 这不是和 OP 说他们尝试过的完全相同的代码吗?
猜你喜欢
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
相关资源
最近更新 更多