计算R中的加权值和和

时间:2014-09-18 21:42:31

标签: r

我有一个包含加权调查结果的大型数据集。我需要为两个不同列的给定组合添加所有权重。

一个例子(抱歉长dput()):

structure(list(SVYEAR = structure(c(24L, 12L, 19L, 22L, 3L, 4L, 
23L, 12L, 21L, 21L), .Label = c("1979", "1980", "1981", "1982", 
"1983", "1984", "1985", "1986", "1987", "1988", "1989", "1990", 
"1991", "1992", "1993", "1994", "1995", "1996", "1997", "1998", 
"1999", "2000", "2001", "2002", "2003", "2004", "2005", "2006", 
"SVYEAR"), class = "factor"), WEIGHT = structure(c(462L, 617L, 
991L, 639L, 195L, 425L, 628L, 178L, 529L, 178L), .Label = c("10", 
"100", "1002", "1005", "1006", "1009", "101", "1011", "1013", 
"1014", "1016", "1017", "102", "1021", "1022", "1024", "1025", 
"1026", "1027", "1028", "103", "1030", "1032", "1033", "1036", 
"1037", "1039", "104", "1042", "1047", "1048", "1049", "105", 
"1050", "1051", "1052", "106", "1060", "1062", "1064", "1065", 
"1066", "1067", "1068", "107", "1070", "108", "1082", "1083", 
"1084", "1086", "1089", "109", "1090", "1094", "1096", "1097", 
"11", "110", "1100", "1101", "1104", "1108", "111", "1114", "1117", 
"112", "1121", "1122", "1124", "1125", "113", "1130", "1131", 
"1133", "1134", "114", "1140", "1143", "1145", "115", "1151", 
"1153", "1156", "1157", "1158", "116", "1160", "1168", "1169", 
"117", "1173", "1176", "1179", "118", "1181", "1189", "119", 
"1190", "1196", "1199", "12", "120", "1200", "1203", "1204", 
"1205", "1206", "1208", "121", "1214", "1215", "1216", "1218", 
"122", "1221", "1222", "1227", "123", "1230", "1236", "124", 
"1241", "1243", "125", "1254", "1258", "126", "1261", "1264", 
"1268", "127", "1270", "1271", "1273", "1278", "128", "1283", 
"129", "1292", "1295", "1298", "13", "130", "1300", "1301", "1306", 
"1309", "131", "1310", "1312", "1313", "132", "1321", "1322", 
"1324", "1325", "133", "1339", "134", "1341", "1342", "1343", 
"1344", "1346", "135", "1358", "136", "1363", "1365", "137", 
"138", "1381", "1388", "139", "1395", "1398", "14", "140", "1406", 
"141", "1413", "1414", "1415", "142", "1429", "143", "1434", 
"1436", "144", "1447", "145", "1451", "146", "147", "1476", "148", 
"149", "15", "150", "1500", "151", "1516", "152", "153", "1530", 
"1532", "154", "1547", "155", "156", "157", "158", "159", "1590", 
"1599", "16", "160", "1604", "1606", "1609", "161", "162", "163", 
"1636", "1638", "164", "165", "1657", "166", "167", "1672", "168", 
"1684", "169", "1690", "17", "170", "171", "172", "173", "174", 
"175", "176", "177", "178", "179", "1792", "18", "180", "181", 
"182", "183", "184", "185", "1851", "186", "1866", "187", "188", 
"189", "1890", "19", "190", "1903", "1904", "191", "1912", "192", 
"193", "194", "1947", "195", "196", "197", "198", "199", "20", 
"200", "201", "202", "203", "204", "2046", "205", "2052", "206", 
"207", "208", "209", "21", "210", "211", "212", "213", "214", 
"215", "216", "217", "218", "2183", "219", "2199", "22", "220", 
"221", "222", "223", "224", "225", "226", "227", "228", "229", 
"23", "230", "231", "232", "233", "2338", "234", "235", "236", 
"237", "238", "239", "24", "240", "241", "242", "243", "244", 
"245", "246", "247", "248", "249", "25", "250", "251", "252", 
"253", "254", "255", "256", "257", "258", "2586", "259", "26", 
"260", "261", "262", "263", "264", "265", "266", "267", "268", 
"2681", "269", "27", "270", "271", "272", "273", "274", "275", 
"276", "277", "278", "279", "28", "280", "281", "282", "283", 
"284", "285", "286", "287", "288", "289", "2899", "29", "290", 
"291", "292", "293", "294", "295", "296", "297", "298", "299", 
"30", "300", "301", "302", "303", "304", "305", "306", "307", 
"308", "309", "31", "310", "311", "312", "313", "314", "315", 
"316", "317", "318", "319", "32", "320", "321", "322", "323", 
"324", "325", "326", "327", "328", "329", "33", "330", "331", 
"332", "333", "334", "335", "336", "337", "338", "339", "34", 
"340", "341", "342", "343", "344", "345", "346", "347", "348", 
"349", "35", "350", "351", "352", "353", "354", "355", "356", 
"357", "358", "359", "36", "360", "361", "362", "363", "364", 
"365", "366", "367", "368", "369", "37", "370", "371", "372", 
"373", "374", "375", "376", "377", "378", "379", "38", "380", 
"381", "382", "383", "384", "385", "386", "387", "388", "389", 
"39", "390", "391", "392", "393", "394", "395", "396", "397", 
"398", "399", "4", "40", "400", "401", "402", "403", "404", "405", 
"406", "407", "408", "409", "41", "410", "411", "412", "413", 
"414", "415", "416", "417", "418", "419", "42", "420", "421", 
"422", "423", "424", "425", "426", "427", "428", "429", "43", 
"430", "431", "432", "433", "434", "435", "436", "437", "438", 
"439", "44", "440", "441", "442", "443", "444", "445", "446", 
"447", "448", "449", "45", "450", "451", "452", "453", "454", 
"455", "456", "457", "458", "459", "46", "460", "461", "462", 
"463", "464", "465", "466", "467", "468", "469", "47", "470", 
"471", "472", "473", "474", "475", "476", "477", "478", "479", 
"48", "480", "481", "482", "483", "484", "485", "486", "487", 
"488", "489", "49", "490", "491", "492", "493", "494", "495", 
"496", "497", "498", "499", "50", "500", "501", "502", "503", 
"504", "505", "506", "507", "508", "509", "51", "510", "511", 
"512", "513", "514", "515", "516", "517", "518", "519", "52", 
"520", "521", "522", "523", "524", "525", "526", "527", "528", 
"529", "53", "530", "531", "532", "533", "534", "535", "536", 
"537", "538", "539", "54", "540", "541", "542", "543", "544", 
"545", "546", "547", "548", "549", "55", "550", "551", "552", 
"553", "554", "555", "556", "557", "558", "559", "56", "560", 
"561", "562", "563", "564", "565", "566", "567", "568", "569", 
"57", "570", "571", "572", "573", "574", "575", "576", "577", 
"578", "579", "58", "580", "581", "582", "583", "584", "585", 
"586", "587", "588", "589", "59", "590", "591", "592", "593", 
"594", "595", "596", "597", "598", "599", "60", "600", "601", 
"602", "603", "604", "605", "606", "607", "608", "609", "61", 
"610", "611", "612", "613", "614", "615", "616", "617", "618", 
"619", "62", "620", "621", "622", "623", "624", "625", "626", 
"627", "628", "629", "63", "630", "631", "632", "633", "634", 
"635", "636", "637", "638", "639", "64", "640", "641", "642", 
"643", "644", "645", "646", "647", "648", "649", "65", "650", 
"651", "652", "654", "655", "656", "657", "658", "659", "66", 
"660", "661", "662", "663", "664", "665", "666", "667", "668", 
"669", "67", "670", "671", "672", "673", "674", "675", "676", 
"677", "678", "679", "68", "680", "681", "682", "683", "684", 
"685", "686", "687", "688", "689", "69", "690", "691", "692", 
"693", "694", "695", "696", "697", "698", "699", "70", "700", 
"701", "702", "703", "704", "705", "706", "708", "709", "71", 
"710", "711", "712", "713", "714", "715", "716", "717", "718", 
"719", "72", "720", "721", "722", "723", "724", "725", "726", 
"727", "728", "729", "73", "731", "732", "733", "734", "736", 
"737", "738", "739", "74", "740", "741", "742", "743", "744", 
"745", "746", "747", "748", "749", "75", "750", "751", "752", 
"753", "754", "755", "757", "758", "759", "76", "760", "761", 
"762", "763", "764", "765", "766", "767", "768", "769", "77", 
"770", "771", "772", "773", "774", "775", "776", "777", "778", 
"779", "78", "780", "781", "782", "783", "784", "786", "787", 
"789", "79", "790", "791", "792", "793", "794", "795", "796", 
"797", "798", "799", "8", "80", "800", "801", "802", "803", "804", 
"805", "806", "808", "809", "81", "810", "811", "812", "813", 
"814", "815", "816", "817", "818", "819", "82", "820", "821", 
"822", "823", "824", "826", "827", "828", "829", "83", "831", 
"832", "833", "834", "835", "836", "837", "838", "839", "84", 
"840", "841", "842", "843", "844", "845", "846", "847", "848", 
"849", "85", "850", "851", "852", "853", "854", "855", "856", 
"858", "86", "860", "861", "863", "864", "865", "867", "868", 
"869", "87", "870", "871", "872", "873", "874", "877", "878", 
"88", "881", "883", "884", "885", "886", "887", "888", "889", 
"89", "890", "891", "893", "894", "895", "896", "897", "899", 
"9", "90", "900", "903", "904", "905", "906", "907", "908", "909", 
"91", "912", "913", "917", "918", "919", "92", "923", "924", 
"925", "926", "927", "928", "93", "930", "931", "932", "934", 
"935", "936", "937", "939", "94", "940", "941", "942", "943", 
"944", "945", "948", "95", "950", "952", "953", "954", "955", 
"957", "959", "96", "960", "961", "962", "963", "965", "967", 
"968", "969", "97", "970", "971", "977", "978", "979", "98", 
"980", "981", "982", "983", "984", "985", "987", "988", "99", 
"991", "992", "994", "995", "996", "997", "998", "999", "WEIGHT"
), class = "factor"), newDx = c(0, 3, 3, 0, 0, 3, 1, 1, 1, 1)), .Names = c("SVYEAR", 
"WEIGHT", "newDx"), row.names = c(25296L, 17979L, 11116L, 20291L, 
34447L, 40522L, 23997L, 59L, 18531L, 18792L), class = "data.frame")

上面的dput()会产生:

      SVYEAR WEIGHT newDx
25296   2002     36     0
17979   1990     50     3
11116   1997    848     3
20291   2000     52     0
34447   1981    147     0
40522   1982    326     3
23997   2001     51     1
59      1990     14     1
18531   1999     42     1
18792   1999     14     1

我需要创建一个新的数据框,它将SVYEAR和newDx的给定组合的所有权重相加。因此,在上面的示例中,最后两行将合并为:

1999     56     1

相比之下,1990年的行将保持独立,因为newDx字段不同。

1990     50     3
1990     14     1

我甚至不知道从哪里开始。我感谢任何帮助。我在学习R方面还有很长的路要走,但是由于这个伟大的社区,我在短短几周内走了很长一段路。

2 个答案:

答案 0 :(得分:1)

尝试使用aggregate。假设df是您的data.frame:

aggregate(WEIGHT~SVYEAR+newDx, sum, data=df)

Here你可以找到一些其他选择。

答案 1 :(得分:1)

dplyr可让您轻松完成此操作:

dat %>% group_by(SVYEAR, newDx) %>% summarize(weight = sum(WEIGHT))