我正在尝试在r中实现非均匀熵类型的计算,但是在结构化方式上存在一些困难,这种方式会在一次执行中对每个区域进行计算。我可以一点一点地做,但是要花很长时间,因为我提供的示例数据非常简化。下面是一个示例,说明如何使用仅包含2个或3个基本单位的区域逐个区域进行计算。关于如何简化整个dataframe流程的任何指示?我可以使用按功能分组吗?
#Example Data
id <- c(1,2,3,4,5,6,7)
Region_ID <- c(1,2,2,3,1,3,2)
BaseunitPOP <- c(10000,4000,8000,8000,10000,11000,13000)
RegionPOP<- c(20000,25000,25000,19000,20000,19000,25000)
S.data <- data.frame(id, Region_ID, BaseunitPOP,RegionPOP)
#For each region, calculate the entropy using the workflow below
#region 1
-(10000*log((10000/20000),2)+(10000*log((10000/20000),2)))
#region 2
-(4000*log((4000/25000),2)+(8000*log((8000/25000),2))+(13000*log((13000/25000),2))
#and so on...
请注意,这些计算(例如区域2):
提前感谢。
[在弄清楚如何在上面提供的示例数据中实现之后,我将尝试使其在我的数据中起作用(链接中的图片)。My Data
new("SpatialPointsDataFrame", data = structure(list(TOTPOP_CY = structure(c(707L,
502L, 206L, 231L), .Label = c("1000", "1001", "1002", "1004",
"1005", "1006", "1007", "1008", "1011", "1012", "1013", "1019",
"1020", "1021", "1022", "1023", "1024", "1025", "1026", "1027",
"1029", "1030", "1032", "1033", "1034", "1035", "1036", "1038",
"1039", "1040", "1041", "1043", "1044", "1045", "1046", "1047",
"1048", "1049", "1050", "1052", "1055", "1056", "1057", "1058",
"1059", "1061", "1062", "1063", "1064", "1066", "1067", "1068",
"1069", "1070", "1071", "1072", "1073", "1074", "1075", "1076",
"1080", "1082", "1083", "1084", "1085", "1086", "1087", "1090",
"1091", "1092", "1093", "1094", "1095", "1096", "1097", "1098",
"1099", "1100", "1101", "1102", "1107", "1108", "1109", "1110",
"1111", "1112", "1113", "1115", "1116", "1117", "1118", "1119",
"1120", "1122", "1124", "1125", "1127", "1128", "1129", "1130",
"1131", "1132", "1133", "1134", "1135", "1136", "1137", "1138",
"1139", "1140", "1141", "1144", "1145", "1146", "1148", "1149",
"1150", "1152", "1153", "1154", "1155", "1159", "1160", "1162",
"1164", "1165", "1166", "1168", "1169", "1170", "1171", "1172",
"1173", "1174", "1175", "1176", "1177", "1178", "1179", "1180",
"1181", "1184", "1185", "1186", "1187", "1188", "1189", "1190",
"1191", "1192", "1193", "1194", "1195", "1196", "1197", "1198",
"1199", "1200", "1203", "1204", "1205", "1206", "1207", "1208",
"1209", "1210", "1211", "1212", "1213", "1214", "1215", "1216",
"1217", "1218", "1219", "1220", "1222", "1224", "1225", "1226",
"1227", "1229", "1230", "1231", "1232", "1233", "1234", "1235",
"1237", "1238", "1239", "1240", "1241", "1242", "1243", "1244",
"1245", "1246", "1248", "1249", "1250", "1251", "1252", "1253",
"1254", "1255", "1256", "1257", "1259", "1260", "1262", "1263",
"1264", "1265", "1266", "1267", "1268", "1269", "1270", "1271",
"1272", "1273", "1274", "1275", "1276", "1277", "1278", "1279",
"1281", "1282", "1283", "1284", "1285", "1286", "1287", "1288",
"1289", "1295", "1297", "1300", "1302", "1303", "1304", "1305",
"1306", "1307", "1309", "1310", "1311", "1312", "1313", "1314",
"1315", "1316", "1317", "1320", "1321", "1322", "1323", "1324",
"1325", "1327", "1328", "1329", "1330", "1331", "1332", "1333",
"1334", "1335", "1336", "1337", "1338", "1339", "1343", "1344",
"1346", "1347", "1348", "1349", "1350", "1351", "1352", "1353",
"1354", "1355", "1356", "1360", "1361", "1362", "1363", "1364",
"1366", "1367", "1370", "1371", "1372", "1373", "1374", "1375",
"1376", "1377", "1378", "1379", "1380", "1381", "1382", "1384",
"1385", "1386", "1387", "1388", "1389", "1390", "1392", "1395",
"1396", "1397", "1398", "1399", "1400", "1401", "1402", "1404",
"1405", "1407", "1408", "1409", "1411", "1412", "1414", "1415",
"1416", "1417", "1418", "1419", "1420", "1422", "1423", "1424",
"1427", "1430", "1431", "1432", "1433", "1435", "1436", "1438",
"1439", "1442", "1445", "1447", "1448", "1449", "1450", "1451",
"1452", "1453", "1454", "1457", "1458", "1459", "1460", "1461",
"1462", "1463", "1464", "1466", "1467", "1468", "1469", "1471",
"1472", "1474", "1475", "1476", "1477", "1478", "1479", "1480",
"1481", "1482", "1484", "1485", "1486", "1487", "1488", "1492",
"1493", "1495", "1496", "1497", "1499", "1500", "1502", "1503",
"1504", "1507", "1510", "1511", "1513", "1515", "1516", "1517",
"1519", "1520", "1521", "1522", "1523", "1525", "1526", "1528",
"1530", "1531", "1533", "1536", "1537", "1538", "1539", "1540",
"1541", "1542", "1543", "1544", "1545", "1546", "1547", "1548",
"1549", "1551", "1553", "1554", "1555", "1556", "1557", "1558",
"1560", "1562", "1563", "1565", "1566", "1568", "1570", "1571",
"1572", "1573", "1574", "1575", "1576", "1577", "1579", "1581",
"1582", "1584", "1585", "1586", "1589", "1590", "1592", "1593",
"1594", "1595", "1596", "1598", "1600", "1601", "1602", "1604",
"1605", "1606", "1607", "1608", "1609", "1610", "1612", "1613",
"1614", "1615", "1617", "1619", "1622", "1623", "1624", "1626",
"1628", "1629", "1631", "1632", "1636", "1637", "1639", "1641",
"1644", "1645", "1647", "1648", "1649", "1652", "1653", "1654",
"1655", "1656", "1658", "1659", "1660", "1662", "1663", "1666",
"1667", "1668", "1671", "1675", "1679", "1682", "1683", "1684",
"1685", "1687", "1688", "1689", "1690", "1691", "1695", "1707",
"1710", "1712", "1714", "1720", "1722", "1723", "1724", "1725",
"1726", "1730", "1731", "1732", "1733", "1734", "1739", "1741",
"1744", "1745", "1746", "1747", "1748", "1749", "1753", "1754",
"1755", "1759", "1761", "1766", "1767", "1770", "1771", "1772",
"1778", "1781", "1782", "1784", "1786", "1787", "1792", "1793",
"1796", "1797", "1798", "1801", "1806", "1807", "1812", "1813",
"1815", "1816", "1817", "1818", "1825", "1829", "1831", "1832",
"1834", "1835", "1836", "1838", "1839", "1841", "1844", "1846",
"1850", "1851", "1855", "1857", "1859", "1862", "1870", "1871",
"1874", "1879", "1887", "1888", "1891", "1894", "1895", "1896",
"1897", "1898", "1903", "1905", "1908", "1911", "1912", "1914",
"1919", "1921", "1922", "1923", "1924", "1929", "1931", "1934",
"1937", "1939", "1943", "1945", "1946", "1947", "1953", "1955",
"1957", "1959", "1963", "1965", "1966", "1973", "1979", "1985",
"1986", "1987", "1989", "1990", "1996", "1998", "1999", "2001",
"2002", "2008", "2013", "2017", "2018", "2022", "2023", "2028",
"2029", "2030", "2034", "2039", "2042", "2043", "2044", "2051",
"2054", "2058", "2059", "2066", "2067", "2068", "2071", "2072",
"2073", "2074", "2084", "2087", "2090", "2093", "2096", "2101",
"2105", "2116", "2118", "2119", "2120", "2121", "2122", "2127",
"2132", "2134", "2140", "2141", "2143", "2145", "2148", "2154",
"2155", "2156", "2157", "2166", "2169", "2171", "2175", "2176",
"2182", "2191", "2193", "2196", "2198", "2203", "2206", "2210",
"2211", "2212", "2221", "2224", "2227", "2229", "2231", "2237",
"2239", "2241", "2248", "2249", "2250", "2252", "2256", "2265",
"2266", "2277", "2278", "2283", "2288", "2291", "2292", "2297",
"2303", "2307", "2318", "2352", "2358", "2359", "2362", "2363",
"2373", "2383", "2389", "2390", "2392", "2398", "2400", "2402",
"2403", "2408", "2415", "2417", "2420", "2423", "2424", "2425",
"2438", "2447", "2448", "2450", "2451", "2452", "2453", "2456",
"2458", "2462", "2464", "2475", "2481", "2484", "2493", "2495",
"2500", "2502", "2505", "2512", "2513", "2533", "2534", "2536",
"2541", "2542", "2544", "2549", "2558", "2560", "2565", "2574",
"2579", "2583", "2587", "2595", "2597", "2613", "2616", "2624",
"2631", "2636", "2640", "2643", "2644", "2650", "2655", "2666",
"267", "2671", "2678", "2686", "2692", "2693", "270", "2700",
"2701", "2702", "2712", "2715", "2718", "2726", "2732", "2742",
"2751", "2757", "2766", "2777", "2786", "2787", "2797", "2799",
"2800", "2814", "2824", "2839", "2840", "2847", "2855", "2865",
"2867", "2879", "2884", "2889", "289", "2892", "2897", "2911",
"2923", "2932", "2935", "2936", "2972", "2976", "2997", "3001",
"3005", "3007", "3010", "3018", "3037", "3038", "3045", "3048",
"3061", "3077", "3094", "3103", "3140", "3148", "3179", "3222",
"3227", "3249", "3272", "3274", "3291", "3295", "3310", "3318",
"3349", "3358", "3371", "3416", "3467", "3490", "3509", "3529",
"3538", "3572", "3649", "3656", "3677", "3684", "3707", "3758",
"3771", "3959", "3975", "3982", "4104", "4111", "4281", "4397",
"4553", "456", "4651", "4671", "468", "4730", "4753", "4790",
"4812", "4833", "4848", "4882", "501", "5062", "507", "5101",
"513", "529", "535", "5352", "545", "551", "5512", "556", "564",
"565", "5658", "570", "571", "577", "580", "5812", "586", "587",
"5899", "594", "598", "600", "6017", "602", "6022", "6033", "606",
"608", "6080", "609", "610", "611", "612", "6151", "617", "618",
"621", "622", "623", "625", "628", "631", "632", "635", "638",
"640", "641", "643", "644", "645", "646", "647", "649", "6515",
"652", "655", "657", "659", "660", "661", "663", "664", "665",
"667", "669", "670", "671", "672", "673", "674", "677", "678",
"679", "680", "681", "682", "683", "684", "685", "686", "687",
"688", "689", "690", "691", "693", "694", "6942", "695", "697",
"698", "699", "700", "701", "703", "704", "706", "707", "708",
"709", "710", "711", "712", "713", "714", "715", "717", "718",
"719", "720", "721", "722", "724", "727", "728", "729", "730",
"731", "732", "733", "734", "735", "7367", "737", "738", "739",
"741", "742", "743", "744", "745", "746", "748", "749", "750",
"751", "752", "753", "754", "755", "756", "757", "758", "760",
"762", "764", "765", "766", "767", "768", "769", "770", "771",
"772", "773", "774", "775", "776", "777", "7774", "780", "781",
"782", "783", "784", "785", "787", "788", "789", "792", "793",
"794", "795", "796", "797", "798", "799", "801", "802", "803",
"804", "805", "806", "807", "808", "809", "810", "811", "812",
"813", "814", "815", "816", "817", "818", "820", "822", "823",
"825", "826", "827", "828", "829", "830", "831", "832", "833",
"834", "835", "836", "838", "839", "840", "841", "842", "844",
"845", "846", "847", "848", "849", "851", "852", "853", "854",
"855", "856", "857", "858", "859", "860", "861", "862", "863",
"864", "865", "866", "867", "868", "869", "870", "871", "872",
"873", "874", "876", "877", "878", "879", "880", "881", "882",
"884", "885", "886", "888", "890", "8901", "891", "892", "893",
"894", "895", "896", "8965", "898", "899", "900", "901", "902",
"903", "904", "906", "907", "908", "909", "910", "911", "912",
"913", "914", "915", "916", "917", "918", "919", "920", "921",
"922", "923", "924", "925", "927", "928", "929", "931", "932",
"933", "934", "935", "936", "937", "938", "939", "940", "941",
"942", "943", "944", "945", "946", "947", "948", "949", "951",
"952", "953", "954", "955", "957", "958", "960", "961", "962",
"963", "964", "965", "966", "967", "968", "969", "970", "971",
"972", "973", "974", "975", "976", "977", "978", "979", "980",
"981", "982", "983", "984", "985", "987", "988", "989", "990",
"991", "992", "993", "994", "995", "996", "997", "998", "999"
), class = "factor"), SOMid = structure(c(41L, 41L, 80L, 32L), .Label = c("0",
"1", "10", "100", "101", "102", "103", "104", "105", "106", "107",
"108", "109", "11", "110", "111", "112", "113", "114", "115",
"116", "117", "12", "13", "14", "15", "16", "17", "18", "19",
"2", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29",
"3", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39",
"4", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49",
"5", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59",
"6", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69",
"7", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79",
"8", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89",
"9", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99"
), class = "factor"), SOMPOP = structure(c(45L, 45L, 102L, 72L
), .Label = c("19943", "20075", "20092", "20103", "20123", "20124",
"20171", "20176", "20222", "20229", "20266", "20484", "20492",
"20508", "20534", "20558", "20588", "20706", "20751", "20752",
"20848", "20948", "21073", "21091", "21270", "21348", "21384",
"21408", "21461", "21506", "21511", "21523", "21539", "21581",
"21623", "21658", "21693", "21733", "21796", "21918", "21941",
"21964", "22040", "22084", "22138", "22158", "22214", "22232",
"22330", "22365", "22368", "22413", "22463", "22474", "22480",
"22610", "22635", "23038", "23092", "23277", "23406", "23535",
"23579", "23599", "23908", "23940", "23987", "24068", "24180",
"24203", "24449", "24568", "24637", "24767", "24797", "24866",
"25005", "25308", "25652", "25717", "25827", "25897", "25998",
"26279", "26428", "26447", "26797", "26836", "27427", "27582",
"27701", "27885", "28099", "28879", "28973", "29007", "29082",
"29158", "29196", "29217", "29452", "29678", "30866", "31380",
"31718", "32268", "32789", "32984", "33043", "34578", "34995",
"35082", "36112", "37832", "38703", "39637", "41303", "42442"
), class = "factor"), REDCAPid = structure(c(12L, 12L, 12L, 26L
), .Label = c("0", "1", "10", "100", "101", "102", "103", "11",
"12", "13", "14", "15", "16", "17", "18", "19", "2", "20", "21",
"22", "23", "24", "25", "26", "27", "28", "29", "3", "30", "31",
"32", "33", "34", "35", "36", "37", "38", "39", "4", "40", "41",
"42", "43", "44", "45", "46", "47", "48", "49", "5", "50", "51",
"52", "53", "54", "55", "56", "57", "58", "59", "6", "60", "61",
"62", "63", "64", "65", "66", "67", "68", "69", "7", "70", "71",
"72", "73", "74", "75", "76", "77", "78", "79", "8", "80", "81",
"82", "83", "84", "85", "86", "87", "88", "89", "9", "90", "91",
"92", "93", "94", "95", "96", "97", "98", "99"), class = "factor"),
REDCAPPOP = structure(c(26L, 26L, 26L, 104L), .Label = c("20149",
"20207", "20286", "20313", "20385", "20399", "20492", "20616",
"20625", "20733", "20736", "20824", "20852", "20889", "21029",
"21158", "21180", "21231", "21271", "21279", "21391", "21435",
"21590", "21595", "21661", "21685", "22155", "22279", "22510",
"22656", "23007", "23048", "23524", "23572", "23734", "24212",
"24254", "24464", "24607", "24632", "24660", "24741", "24908",
"24932", "24996", "25051", "25147", "25205", "25288", "25442",
"25479", "25953", "25974", "26424", "26936", "26945", "27121",
"27426", "27638", "28022", "28092", "28271", "28409", "28475",
"29102", "29376", "29421", "29871", "29996", "30317", "30615",
"30653", "31349", "31593", "31820", "32178", "32473", "32697",
"33145", "33191", "33416", "33779", "33885", "34116", "35639",
"35733", "35757", "36277", "36963", "36976", "37376", "38004",
"38928", "40199", "40218", "40729", "40994", "41734", "42420",
"44186", "44595", "47983", "49209", "49572"), class = "factor"),
MAXPid = c(0L, 0L, 0L, 0L), MAXPPOP = c(22735L, 22735L, 22735L,
22735L)), row.names = c(NA, 4L), class = "data.frame"), coords.nrs = numeric(0),
coords = structure(c(482201.4333, 481883.4586, 483485.1084,
480435.2772, 5004169.8777, 5001808.0206, 5004236.3722, 5005944.4531
), .Dim = c(4L, 2L), .Dimnames = list(NULL, c("coords.x1",
"coords.x2"))), bbox = structure(c(480435.2772, 5001808.0206,
483485.1084, 5005944.4531), .Dim = c(2L, 2L), .Dimnames = list(
c("coords.x1", "coords.x2"), c("min", "max"))), proj4string = new("CRS",
projargs = "+proj=utm +zone=15 +datum=NAD83 +units=m +no_defs +ellps=GRS80 +towgs84=0,0,0"))
这是一个整洁的解决方案(我认为代码是很容易解释的,但是如果有任何您无法遵循的内容,请在评论中让我知道,我会尽力解释):
library(dplyr)
S.data %>% group_by(Region_ID) %>% # once you group_by, the rest is just vectorized calculation
summarise(result=-sum(BaseunitPOP*log((BaseunitPOP/RegionPOP),2)))
# A tibble: 3 x 2
Region_ID result
<dbl> <dbl>
1 1 20000
2 2 35991.
3 3 18657.
或者,对于仅基本解决方案:
sapply(split(S.data, S.data$Region_ID), function(x)
-sum(x["BaseunitPOP"]*log((x["BaseunitPOP"]/x["RegionPOP"]),2)))
1 2 3
20000.00 35990.69 18656.87
UPDATE:
我使用了您通过dput提供的数据,并且我注意到出于某种原因TOTPOP_CY和SOMPOP(以及其他几个原因)是因子,而不是数字或整数。不知道为什么会这样,所以让我们从修复此问题开始:
S.data$TOTPOP_CY<-as.numeric(S.data$TOTPOP_CY)
S.data$SOMPOP<-as.numeric(S.data$SOMPOP)
完成此操作后,一旦通过as.data.frame
,就可以将原始解决方案应用于数据集。请注意,但是,这可能会导致在rgdal中使用结果时出现一些问题,因此您可能需要将其传递回SpatialPointsDataFrame
。
as.data.frame(S.data) %>% group_by(SOMid) %>%
summarise(result=-sum(TOTPOP_CY*log((TOTPOP_CY/SOMPOP),2)))
# A tibble: 3 x 2
SOMid result
<fct> <dbl>
1 20 -389.
2 29 -4556.
3 64 -209.