亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

傳播帶有重復標識符的data.frame / tibble

傳播帶有重復標識符的data.frame / tibble

30秒到達戰場 2019-12-03 15:56:00
提迪爾(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 ...”我的一般問題是如何在這種數據集上反轉“收集”的應用程序。
查看完整描述

2 回答

?
肥皂起泡泡

TA貢獻1829條經驗 獲得超6個贊

毫無疑問,Hadley的干預是完美的……但是在那之后我最終對語法有所懷疑……所以,就其價值而言,我發布了完整的操作代碼(對不起,我的語法與上面有些不同):


library(tidyr)

library(dplyr)


wide <- 

  iris %>%

  mutate(row = row_number()) %>%

  gather(vars, val, -Species, -row) %>%

  spread(vars, val)


head(wide)

#   Species row Petal.Length Petal.Width Sepal.Length Sepal.Width

# 1  setosa   1          1.4         0.2          5.1         3.5

# 2  setosa   2          1.4         0.2          4.9         3.0

# 3  setosa   3          1.3         0.2          4.7         3.2

# 4  setosa   4          1.5         0.2          4.6         3.1

# 5  setosa   5          1.4         0.2          5.0         3.6

# 6  setosa   6          1.7         0.4          5.4         3.9


head(iris)

# Sepal.Length Sepal.Width Petal.Length Petal.Width Species

# 1          5.1         3.5          1.4         0.2  setosa

# 2          4.9         3.0          1.4         0.2  setosa

# 3          4.7         3.2          1.3         0.2  setosa

# 4          4.6         3.1          1.5         0.2  setosa

# 5          5.0         3.6          1.4         0.2  setosa

# 6          5.4         3.9          1.7         0.4  setosa

他們是一樣的...。只要您覺得喜歡就需要重新排序...


wide <- wide[,c(3, 4, 5, 6, 1)]  ## Reorder and then remove "row" column

并做了。


查看完整回答
反對 回復 2019-12-03
?
開心每一天1111

TA貢獻1836條經驗 獲得超13個贊

由于先前的答案可能還不夠清楚,因此gather您在嘗試執行時會表現出自己的問題spread。


問題在于,在收集過程中,您將丟失對哪個數據feature.measure屬于原始數據幀中的哪一行的了解,因此spread不知道如何再次將各個值組合到“寬”表中。


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

long.iris.df = iris.df %>% 

  tibble::rowid_to_column() %>% 

  gather(key = feature.measure, value = size, -Species, -rowid)


#>   rowid Species feature.measure size

#> 1     1  setosa    Sepal.Length  5.1

#> 2     2  setosa    Sepal.Length  4.9

#> 3     3  setosa    Sepal.Length  4.7

#> 4     4  setosa    Sepal.Length  4.6

#> 5     5  setosa    Sepal.Length  5.0

#> 6     6  setosa    Sepal.Length  5.4

現在,其中的每個值都會size保留其值,rowid因此您始終可以將其重新組合到寬數據集(刪除不必要的rowid):


w.iris.df = long.iris.df %>% 

  spread(key = feature.measure, value = size) %>% 

  select(-rowid)

head(w.iris.df)

#>   Species Petal.Length Petal.Width Sepal.Length Sepal.Width

#> 1  setosa          1.4         0.2          5.1         3.5

#> 2  setosa          1.4         0.2          4.9         3.0

#> 3  setosa          1.3         0.2          4.7         3.2

#> 4  setosa          1.5         0.2          4.6         3.1

#> 5  setosa          1.4         0.2          5.0         3.6

#> 6  setosa          1.7         0.4          5.4         3.9


查看完整回答
反對 回復 2019-12-03
  • 2 回答
  • 0 關注
  • 504 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號