gpt4 book ai didi

r - Tidyr::spread() 错误:每行输出必须由唯一的键组合标识

转载 作者:行者123 更新时间:2023-12-03 23:49:15 52 4
gpt4 key购买 nike

我正在学习 tidyr 并做一个小练习来改造 iris数据集从宽到长。

原始数据集:

   Species Sepal.Length Sepal.Width Petal.Length Petal.Width
1 setosa 5.1 3.5 1.4 0.2
2 setosa 4.9 3.0 1.4 0.2
3 setosa 4.7 3.2 1.3 0.2
4 setosa 4.6 3.1 1.5 0.2
5 setosa 5.0 3.6 1.4 0.2
6 setosa 5.4 3.9 1.7 0.4

我想要的结果数据集:
  Species  Part Length Width
1 setosa Petal 1.4 0.2
2 setosa Petal 1.4 0.2
3 setosa Petal 1.3 0.2
4 setosa Petal 1.5 0.2
5 setosa Petal 1.4 0.2
6 setosa Petal 1.7 0.4


我为操作数据集编写的代码:
iris_re <- iris[,c(5,1,2,3,4)]

iris.wide <- iris_re %>%
gather(key = "flower_att", value = "measurement",
-Species) %>%
separate(flower_att, into = c("Part","Method")) %>%
spread(Method,measurement)

但最后一行 spread()给我一个错误:

Error: Each row of output must be identified by a unique combination of keys. Keys are shared for 400 rows:



我没想到会发生这种情况,我仍在努力应对。谢谢!

最佳答案

我们可以使用 pivot_longer来自 tidyr , 也可以采用多列

library(dplyr)
library(tidyr)
iris_re %>%
pivot_longer(cols = -Species, names_to = c("Part", ".value"), names_sep= "[.]") %>%
head
# Species Part Length Width
#1 setosa Sepal 5.1 3.5
#2 setosa Petal 1.4 0.2
#3 setosa Sepal 4.9 3.0
#4 setosa Petal 1.4 0.2
#5 setosa Sepal 4.7 3.2
#6 setosa Petal 1.3 0.2
spread 中的错误当存在不止一种独特的组合时,可能会发生这种情况。与 pivot_wider ,它现在被警告替换,并返回 list列如果有重复,然后我们可以 unnest .或者另一种方法是创建一个按列标识符分组的序列列,这些列标识符具有重复项以形成唯一的行标识符,即
iris_re %>% 
gather(key = "flower_att", value = "measurement",
-Species) %>%
separate(flower_att, into = c("Part","Method")) %>%
group_by(Species, Part, Method) %>%
mutate(rn = row_number()) %>%
ungroup %>%
spread(Method,measurement)

关于r - Tidyr::spread() 错误:每行输出必须由唯一的键组合标识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60083062/

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