长数据变宽,列中没有值
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 = "")
我有一个数据,假设它叫做 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 = "")