长数据变宽,列中没有值

long data to wide without a value in column

我有一个数据,假设它叫做 df

Inspection  Error
111         A02
112         B02
122         D02
122         A02 

我希望数据按以下方式显示;

Inspection  Error   Error
111         A02 
112         B02 
122         D02      A02

如您所见,122 的 "inspection" 行现在已转移到值为 D02 和 A02 的列。我尝试了 spread 函数和 cast,但结果并不接近我想要的。任何建议将不胜感激。 只是一个额外的信息 - 我的检查是数字和错误作为字符。谢谢

您可以通过添加一个新列来计算 Inspection 的每个级别中的值来实现此目的。然后你使用那​​个新列投射到宽:

library(reshape2)
library(dplyr)

dat %>% group_by(Inspection) %>%
  arrange(Error) %>%
  mutate(counter = paste0("Error", 1:n())) %>%
  dcast(Inspection ~ counter, value.var="Error", fill="")

  Inspection Error1 Error2
1        111    A02       
2        112    B02       
3        122    A02    D02

根据@David Arenburg 的评论,这是 tidyr 版本:

library(tidyr) 

dat %>% 
  group_by(Inspection) %>%
  arrange(Error) %>%
  mutate(counter = paste0("Error", 1:n())) %>%
  spread(counter, Error, fill = "")