传播带有重复标识符的data.frame / tibble

提迪尔(tidyr)的文档表明,收集和传播是可传递的,但以下带有“ iris”数据的示例显示它们不是,但不清楚原因。任何澄清将不胜感激


iris.df = as.data.frame(iris)

long.iris.df = iris.df %>% gather(key = feature.measure, value = size, -Species)

w.iris.df = long.iris.df %>% spread(key = feature.measure, value = size, -Species)

我希望数据框“ w.iris.df”与“ iris.df”相同,但收到以下错误:


“错误:行的重复标识符(1、2、3、4、5、6、7、8、9 ...”


我的一般问题是如何在这种数据集上反转“收集”的应用程序。


30秒到达战场
浏览 437回答 2
2回答

肥皂起泡泡

毫无疑问,Hadley的干预是完美的……但是在那之后我最终对语法有所怀疑……所以,就其价值而言,我发布了完整的操作代码(对不起,我的语法与上面有些不同):library(tidyr)library(dplyr)wide <-&nbsp;&nbsp; iris %>%&nbsp; mutate(row = row_number()) %>%&nbsp; gather(vars, val, -Species, -row) %>%&nbsp; spread(vars, val)head(wide)#&nbsp; &nbsp;Species row Petal.Length Petal.Width Sepal.Length Sepal.Width# 1&nbsp; setosa&nbsp; &nbsp;1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1.4&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.2&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5.1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3.5# 2&nbsp; setosa&nbsp; &nbsp;2&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1.4&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.2&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 4.9&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3.0# 3&nbsp; setosa&nbsp; &nbsp;3&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1.3&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.2&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 4.7&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3.2# 4&nbsp; setosa&nbsp; &nbsp;4&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1.5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.2&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 4.6&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3.1# 5&nbsp; setosa&nbsp; &nbsp;5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1.4&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.2&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5.0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3.6# 6&nbsp; setosa&nbsp; &nbsp;6&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1.7&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.4&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5.4&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3.9head(iris)# Sepal.Length Sepal.Width Petal.Length Petal.Width Species# 1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5.1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3.5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1.4&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.2&nbsp; setosa# 2&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 4.9&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3.0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1.4&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.2&nbsp; setosa# 3&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 4.7&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3.2&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1.3&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.2&nbsp; setosa# 4&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 4.6&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3.1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1.5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.2&nbsp; setosa# 5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5.0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3.6&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1.4&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.2&nbsp; setosa# 6&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5.4&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3.9&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1.7&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.4&nbsp; setosa他们是一样的...。只要您觉得喜欢就需要重新排序...wide <- wide[,c(3, 4, 5, 6, 1)]&nbsp; ## Reorder and then remove "row" column并做了。

开心每一天1111

由于先前的答案可能还不够清楚,因此gather您在尝试执行时会表现出自己的问题spread。问题在于,在收集过程中,您将丢失对哪个数据feature.measure属于原始数据帧中的哪一行的了解,因此spread不知道如何再次将各个值组合到“宽”表中。iris.df = as.data.frame(iris)long.iris.df = iris.df %>%&nbsp;&nbsp; tibble::rowid_to_column() %>%&nbsp;&nbsp; gather(key = feature.measure, value = size, -Species, -rowid)#>&nbsp; &nbsp;rowid Species feature.measure size#> 1&nbsp; &nbsp; &nbsp;1&nbsp; setosa&nbsp; &nbsp; Sepal.Length&nbsp; 5.1#> 2&nbsp; &nbsp; &nbsp;2&nbsp; setosa&nbsp; &nbsp; Sepal.Length&nbsp; 4.9#> 3&nbsp; &nbsp; &nbsp;3&nbsp; setosa&nbsp; &nbsp; Sepal.Length&nbsp; 4.7#> 4&nbsp; &nbsp; &nbsp;4&nbsp; setosa&nbsp; &nbsp; Sepal.Length&nbsp; 4.6#> 5&nbsp; &nbsp; &nbsp;5&nbsp; setosa&nbsp; &nbsp; Sepal.Length&nbsp; 5.0#> 6&nbsp; &nbsp; &nbsp;6&nbsp; setosa&nbsp; &nbsp; Sepal.Length&nbsp; 5.4现在,其中的每个值都会size保留其值,rowid因此您始终可以将其重新组合到宽数据集(删除不必要的rowid):w.iris.df = long.iris.df %>%&nbsp;&nbsp; spread(key = feature.measure, value = size) %>%&nbsp;&nbsp; select(-rowid)head(w.iris.df)#>&nbsp; &nbsp;Species Petal.Length Petal.Width Sepal.Length Sepal.Width#> 1&nbsp; setosa&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1.4&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.2&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5.1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3.5#> 2&nbsp; setosa&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1.4&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.2&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 4.9&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3.0#> 3&nbsp; setosa&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1.3&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.2&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 4.7&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3.2#> 4&nbsp; setosa&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1.5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.2&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 4.6&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3.1#> 5&nbsp; setosa&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1.4&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.2&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5.0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3.6#> 6&nbsp; setosa&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1.7&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.4&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5.4&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3.9
打开App,查看更多内容
随时随地看视频慕课网APP