2016-08-30 34 views
4

中收集粗牙你有沒有看到使用tidyr::gather函數收集tibble類的最新問題?在使用data.frame上的簡單selectrename函數後,現在dplyr返回tibble無法在R

有什麼辦法可以解決這個問題,而不是將tibble類更改爲data.frame

簡單例子如下

> library(tibble) 
> library(tidyr) 
> 
> head(gather(iris, Species)) 
    Species  Species value 
1 setosa Sepal.Length 5.1 
2 setosa Sepal.Length 4.9 
3 setosa Sepal.Length 4.7 
4 setosa Sepal.Length 4.6 
5 setosa Sepal.Length 5.0 
6 setosa Sepal.Length 5.4 
> 
> head(gather(as_tibble(iris), Species)) 
Error: Each variable must have a unique name. 
Problem variables: 'Species' 
> 
> sessionInfo() 
R version 3.3.1 (2016-06-21) 
Platform: x86_64-pc-linux-gnu (64-bit) 
Running under: Ubuntu 14.04.5 LTS 

locale: 
[1] LC_CTYPE=pl_PL.UTF-8  LC_NUMERIC=C    LC_TIME=pl_PL.UTF-8  
[4] LC_COLLATE=pl_PL.UTF-8  LC_MONETARY=pl_PL.UTF-8 LC_MESSAGES=pl_PL.UTF-8 
[7] LC_PAPER=pl_PL.UTF-8  LC_NAME=C     LC_ADDRESS=C    
[10] LC_TELEPHONE=C    LC_MEASUREMENT=pl_PL.UTF-8 LC_IDENTIFICATION=C  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] tidyr_0.6.0 tibble_1.2 

loaded via a namespace (and not attached): 
[1] magrittr_1.5 assertthat_0.1 tools_3.3.1 Rcpp_0.12.6 
+0

這裏還張貼https://github.com/hadley/tidyr/issues/231 –

+0

這是荒謬的收集工作的「:這可以通過提供的名稱爲keyvalue列自己,比如可以實現tbl'與'data.frame'一樣,但是與最新版本的dplyr不同,它在類似語法的'tibbles'上不起作用。由於這種不兼容性,我將不得不重寫許多代碼行 –

+0

@Axeman您可以發表您的評論和答案,請 –

回答

4

的問題並不一定是tibble。它正在做安全(可以說是非常嚴格的)不允許重複列名的事情。

這意味着您的gather調用應避免重複的名稱。

gather(iris, key, value, -Species)