2017-10-11 36 views
0

我的數據幀目前看起來像嘗試將數據長格式轉換爲寬幅

country_txt Year nkill_yr Countrycode Population deathsPer100k 
     <chr> <dbl> <dbl>  <dbl>  <dbl>   <dbl> 
1 Afghanistan 1973  0   4  12028 0.000000e+00 
2 Afghanistan 1979  53   4  13307 3.982866e-05 
3 Afghanistan 1987  0   4  11503 0.000000e+00 
4 Afghanistan 1988  128   4  11541 1.109089e-04 
5 Afghanistan 1989  10   4  11778 8.490406e-06 
6 Afghanistan 1990  12   4  12249 9.796718e-06 

它包含人的國家名單,並每10萬人的恐怖死亡。

我非常希望在寬格式的數據幀的結構爲:

country_txt 1970 1971 1972 1973 1974 1975 
Afghanistan 3.98 1.1 0  4.3 0.8 0.09 
Albania  0 0.4 0.5 0 0 0 
Algeria  0 0 0  0.1 0.2 0 
Angola  0 0.3 0  0 0 0 

除了我的功能目前重複這樣的:

YearCountryRatio<- spread(data = YearCountryRatio, Year, deathsPer100k) 

country_txt 1970 1971 1972 1973 
Afghanistan 3.98 NA NA NA 
Afghanistan NA 1.1 NA NA 
Afghanistan NA NA 0 NA 
Afghanistan NA NA NA 4.3 

同樣地,對於其他國家,

有什麼辦法可以:

  1. 摺疊所有的NA值只顯示一個國家或
  2. 直接把它放到寬的格式?

回答

0

我假設你希望每個country_txt的值減少到一行,並樂意丟棄未使用的變量。 (注:我添加的"XYZ"虛擬country_txt值的樣本數據,以顯示各國如何多分散)

library(dplyr) 
library(tidyr) 

df <- read.table(text = "country_txt Year nkill_yr Countrycode Population deathsPer100k 
1 Afghanistan 1973  0   4  12028 0.000000e+00 
2 Afghanistan 1979  53   4  13307 3.982866e-05 
3 Afghanistan 1987  0   4  11503 0.000000e+00 
4 XYZ   1988  128   4  11541 1.109089e-04 
5 XYZ   1989  10   4  11778 8.490406e-06 
6 XYZ   1990  12   4  12249 9.796718e-06", header = TRUE) 

df <- mutate(df, deathsPer100k = round(deathsPer100k*100000, 2)) 
select(df, country_txt, Year, deathsPer100k) %>% spread(Year, deathsPer100k, fill = 0) 
#> country_txt 1973 1979 1987 1988 1989 1990 
#> 1 Afghanistan 0 3.98 0 0.00 0.00 0.00 
#> 2   XYZ 0 0.00 0 11.09 0.85 0.98 
相關問題