簡體   English   中英

R中的錯誤擴展數據集

[英]error spreading data set in R

我有一個長的數據集,該數據集按地理位置和年份細分,有大約5個感興趣的變量(請參見結構分解),每次我嘗試將其轉換為寬格式時,都會被告知存在重復,因此無法。

df
Yr    Geo     Obs1  Obs2  
2001  Dist1    1     3     
2002  Dist1    2     5   
2003  Dist1    4     2    
2004  Dist1    2     1   
2001  Dist2    1     3     
2002  Dist2   .9     5     
2003  Dist2    6     8     
2004  Dist2    2    .2     

我想把它轉換成這樣的東西

yr    dist1obs1  dist1obs2  dist2obs1 dist2obs2
2001
2002
2003
2004

尋找這樣的東西...?

> reshape(df, v.names= c("Obs1", "Obs2"), idvar="Yr", timevar ="Geo", direction="wide")
    Yr Obs1.Dist1 Obs2.Dist1 Obs1.Dist2 Obs2.Dist2
1 2001          1          3        1.0        3.0
2 2002          2          5        0.9        5.0
3 2003          4          2        6.0        8.0
4 2004          2          1        2.0        0.2

這是使用tidyr的解決方案。 由於spread的一個鍵值對的作品,你需要先gatherObsunitedist ,讓你有一個鍵值對一起工作吧。 我還將列名設置為小寫,如請求的輸出所示。

library(tidyverse)
tbl <- read_table2(
  "Yr    Geo     Obs1  Obs2
  2001  Dist1    1     3
  2002  Dist1    2     5
  2003  Dist1    4     2
  2004  Dist1    2     1
  2001  Dist2    1     3
  2002  Dist2   .9     5
  2003  Dist2    6     8
  2004  Dist2    2    .2"
)

tbl %>%
  gather("obsnum", "obs", Obs1, Obs2) %>%
  unite(colname, Geo, obsnum, sep = "") %>%
  spread(colname, obs) %>%
  `colnames<-`(str_to_lower(colnames(.)))
#> # A tibble: 4 x 5
#>      yr dist1obs1 dist1obs2 dist2obs1 dist2obs2
#>   <int>     <dbl>     <dbl>     <dbl>     <dbl>
#> 1  2001        1.        3.     1.00      3.00 
#> 2  2002        2.        5.     0.900     5.00 
#> 3  2003        4.        2.     6.00      8.00 
#> 4  2004        2.        1.     2.00      0.200

reprex軟件包 (v0.2.0)創建於2018-04-19。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM