簡體   English   中英

{dplyr} 總結沒有按預期工作

[英]{dplyr} Summarise not working as expected

我正在嘗試獲取每年所有值的總和。 使用此代碼,所有年份的總和均為NA 我不明白為什么。

-代碼

df %>%
  group_by(`@TIME_PERIOD`) %>%
  summarise(sum = sum(as.numeric(`@OBS_VALUE`)))

考慮以下數據:

df <- structure(list(`@TIME_PERIOD` = c("2009", "2010", "2011", "2012", 
"2013", "2014", "2015", "2016", "2017", "2018", "2019", "2009", 
"2010", "2011", "2012", "2013", "2014", "2015", "2016", "2017", 
"2018", "2019", "2009", "2010", "2011", "2012", "2013", "2014", 
"2015", "2016", "2017", "2018", "2019", "2009", "2010", "2011", 
"2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019", 
"2009", "2010", "2011", "2012", "2013", "2014", "2015", "2016", 
"2017", "2018", "2019", "2010", "2011", "2012", "2013", "2014", 
"2015", "2016", "2017", "2018", "2019", "2009", "2010", "2011", 
"2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019", 
"2009", "2010", "2011", "2012", "2013", "2014", "2015", "2016", 
"2017", "2018", "2019", "2009", "2010", "2011", "2012", "2013", 
"2014", "2015", "2016", "2017", "2018", "2019", "2009", "2010", 
"2011", "2012", "2013", "2014", "2009", "2010", "2011", "2012", 
"2013", "2014", "2015", "2016", "2017", "2018", "2019", "2009", 
"2010", "2011", "2012", "2013", "2014", "2015", "2016", "2017", 
"2018", "2019", "2009", "2010", "2011", "2012", "2013", "2014", 
"2015", "2016", "2017", "2018", "2019", "2009", "2010", "2011", 
"2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019", 
"2009", "2010", "2011", "2012", "2013", "2014", "2015", "2016", 
"2017", "2018", "2019", "2009", "2010", "2011", "2012", "2013", 
"2014", "2015", "2016", "2017", "2018", "2019", "2009", "2010", 
"2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", 
"2019", "2014", "2015", "2016", "2017", "2018", "2019"), `@OBS_VALUE` = c("199.5231", 
"812.4096", "1165.8684449076", "928.150124526", "1445.84844", 
"1296.41598", "1514.59944", "1334.4906", "1647.35848", "1558.9175", 
"1388.63474", "80.38548", "121.1078232", "92.9589516", "127.3524462", 
NA, NA, NA, NA, NA, NA, "36.432936031836", "91.7402892000001", 
"94.1165832", "81.9491565", "90.90666", "102.32922", NA, "168.7485", 
"279.0792996", "417.2796448", "258.4036", "253.9805188", "17.43126", 
"22.44816", "21.73752", "20.84652", "28.8259482", "19.2811221", 
"43.6274751", "50.8128905", "39.2830715", "25.688075", "34.5703882", 
"704.800746172167", "770.576143217993", "642.352476546557", "220.123395925455", 
"136.5309", "291.384", "371.2467", "441.6679", "687.1989", "588.53", 
"527.998", "1248.1427978532", "2236.4275546323", "1059.3077546304", 
"6419.170982289", "5615.471576799", "4760.2082595648", "5757.9532837402", 
"5711.6219394629", "5889.541005575", "6443.9571653108", "20514.72024", 
"20516.0148", "28807.13082", "21230.33346", "24691.54431", "19212.64686", 
"21936.54291", "16742.37571", "19168.29197", "16405.56", "24145.01152", 
"11.5248", "5.3448", "12.939", "11.8746", "39.9939", "13.3551", 
"8.7096", "10.541", "7.1958", "21.755", "46.0594", "8413.31810629381", 
"7354.3811714922", "8309.5456112583", "8820.1613664864", "2307.2343", 
"2272.7952", "2100.1023", "2031.2507", "2988.6556", "4650.99", 
"4731.7608", "196.778757", "979.6497282", "88.205163", "2587.87116", 
"909.93018", "817.93917", NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, "1002.6576", "1098.3564", "5739.86979", "9012.96160010525", 
"10630.3934965252", "7990.07264989088", "7300.22114094787", "7230.71730579791", 
"6725.87228037132", "7531.87672425818", "6769.05856033655", "2.8812", 
"60.129", "50.33271", "69.40044", "70.4488011261", "80.7924921111", 
"67.280691057", "93.6984124631", "142.3116927921", "128.028766965", 
"128.9077672686", "74.7972190797301", "184.378184891178", "179.521916167317", 
"98.8463058489", "86.3206272", "102.3911235", "96.0864846", "105.0379027", 
"114.4432025", "138.2473", "124.1121086", "1168.90284", "1003.61982", 
"1103.17914", "1494.35244", "13179.64497", "12590.82405", "12312.1083", 
"13312.86136", "18590.3493", "19435.8025", "24003.6878", "217.31451", 
"429.05382", "337.203279", "436.906116", "249.299907", "338.903874", 
"242.192202", "162.900614", "193.387125", "297.7229", "196.055768", 
NA, NA, NA, "6252.6366", NA, NA, NA, NA, NA, NA, NA, "43161.3172724031", 
"51812.2550911566", "49162.8700131921", "65072.7542580131", "59170.898252275", 
"31336.1517258698"), `@REF_AREA` = c("AT", "AT", "AT", "AT", 
"AT", "AT", "AT", "AT", "AT", "AT", "AT", "MT", "MT", "MT", "MT", 
"MT", "MT", "MT", "MT", "MT", "MT", "MT", "SK", "SK", "SK", "SK", 
"SK", "SK", "SK", "SK", "SK", "SK", "SK", "EE", "EE", "EE", "EE", 
"EE", "EE", "EE", "EE", "EE", "EE", "EE", "FI", "FI", "FI", "FI", 
"FI", "FI", "FI", "FI", "FI", "FI", "FI", "IT", "IT", "IT", "IT", 
"IT", "IT", "IT", "IT", "IT", "IT", "BE", "BE", "BE", "BE", "BE", 
"BE", "BE", "BE", "BE", "BE", "BE", "LV", "LV", "LV", "LV", "LV", 
"LV", "LV", "LV", "LV", "LV", "LV", "ES", "ES", "ES", "ES", "ES", 
"ES", "ES", "ES", "ES", "ES", "ES", "NL", "NL", "NL", "NL", "NL", 
"NL", "CY", "CY", "CY", "CY", "CY", "CY", "CY", "CY", "CY", "CY", 
"CY", "FR", "FR", "FR", "FR", "FR", "FR", "FR", "FR", "FR", "FR", 
"FR", "GR", "GR", "GR", "GR", "GR", "GR", "GR", "GR", "GR", "GR", 
"GR", "SI", "SI", "SI", "SI", "SI", "SI", "SI", "SI", "SI", "SI", 
"SI", "DE", "DE", "DE", "DE", "DE", "DE", "DE", "DE", "DE", "DE", 
"DE", "PT", "PT", "PT", "PT", "PT", "PT", "PT", "PT", "PT", "PT", 
"PT", "IE", "IE", "IE", "IE", "IE", "IE", "IE", "IE", "IE", "IE", 
"IE", "LU", "LU", "LU", "LU", "LU", "LU")), row.names = c(NA, 
-187L), class = "data.frame")

數據集中已有一些NA元素

which(is.na(df$`@OBS_VALUE`))
#[1]  16  17  18  19  20  21  28 105 106 107 108 109 110 111 112 113 114 115 171 172 173 175 176 177 178 179 180 181

sum可以通過na.rm = TRUE來解決

library(dplyr)
df %>%
    group_by(`@TIME_PERIOD`) %>%
    summarise(sum = sum(as.numeric(`@OBS_VALUE`), na.rm = TRUE))

-輸出

# A tibble: 11 x 2
#   `@TIME_PERIOD`     sum
# * <chr>            <dbl>
# 1 2009            32697.
# 2 2010            34700.
# 3 2011            48869.
# 4 2012            52462.
# 5 2013            60298.
# 6 2014            93804.
# 7 2015           102734.
# 8 2016            96716.
# 9 2017           121506.
#10 2018           116102.
#11 2019           100166.

也可以在分組之前完成對numeric的轉換

df %>%
    na.omit %>%
    type.convert(as.is = TRUE) %>%
    group_by(`@TIME_PERIOD`) %>%
    summarise(Sum = sum(`@OBS_VALUE`))

接收數據集時要遵循的一些建議(不按任何順序)

  1. 檢查結構 - str(data) - 提供有關數據類型的信息
  2. 檢查缺失值 - colSums(is.na(data))
  3. 檢查建議的 function 的文檔 - help(sum)?sum - 給出有關所有 arguments 和預期輸入數據類型等的想法。
  4. 檢查文檔中提供的示例 - 查找輸入數據的格式與示例中顯示的格式是否有任何差異(在這種情況下不相關)
  5. 最后,確保軟件包和 R 版本是最新的

暫無
暫無

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

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