本文介绍了计算R中多年来所有国家/地区对的相关性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我目前面临以下问题:根据我以前的question,我需要计算多个国家/地区的国家(Value.x和Value.y)之间的多年相关性。实现此目标的最佳方式是什么?
预期产出应该是这样的(对于所有国家对和所有年份)。因此,所有关联结果都存储在表/数据框中。
correlation country_x country_y Time
0.787812 Germany United States 2000
我的数据集的前100行如下所示:
structure(list(LOCATION.x = c("AUS", "AUS", "AUS", "AUS", "AUS",
"AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS",
"AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS",
"AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS",
"AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS",
"AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS",
"AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS",
"AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS",
"AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS",
"AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS",
"AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS", "AUS",
"AUS", "AUS", "AUS", "AUS", "AUS"), Country.x = c("Australia",
"Australia", "Australia", "Australia", "Australia", "Australia",
"Australia", "Australia", "Australia", "Australia", "Australia",
"Australia", "Australia", "Australia", "Australia", "Australia",
"Australia", "Australia", "Australia", "Australia", "Australia",
"Australia", "Australia", "Australia", "Australia", "Australia",
"Australia", "Australia", "Australia", "Australia", "Australia",
"Australia", "Australia", "Australia", "Australia", "Australia",
"Australia", "Australia", "Australia", "Australia", "Australia",
"Australia", "Australia", "Australia", "Australia", "Australia",
"Australia", "Australia", "Australia", "Australia", "Australia",
"Australia", "Australia", "Australia", "Australia", "Australia",
"Australia", "Australia", "Australia", "Australia", "Australia",
"Australia", "Australia", "Australia", "Australia", "Australia",
"Australia", "Australia", "Australia", "Australia", "Australia",
"Australia", "Australia", "Australia", "Australia", "Australia",
"Australia", "Australia", "Australia", "Australia", "Australia",
"Australia", "Australia", "Australia", "Australia", "Australia",
"Australia", "Australia", "Australia", "Australia", "Australia",
"Australia", "Australia", "Australia", "Australia", "Australia",
"Australia", "Australia", "Australia", "Australia"), IPC = c("A01B",
"A01B", "A01B", "A01B", "A01B", "A01B", "A01B", "A01B", "A01B",
"A01B", "A01B", "A01B", "A01B", "A01B", "A01B", "A01B", "A01B",
"A01B", "A01B", "A01B", "A01B", "A01B", "A01B", "A01B", "A01B",
"A01B", "A01B", "A01B", "A01B", "A01B", "A01B", "A01B", "A01B",
"A01B", "A01B", "A01B", "A01B", "A01B", "A01B", "A01B", "A01B",
"A01B", "A01B", "A01B", "A01B", "A01B", "A01B", "A01B", "A01B",
"A01B", "A01B", "A01B", "A01B", "A01B", "A01B", "A01B", "A01B",
"A01B", "A01B", "A01B", "A01B", "A01B", "A01B", "A01B", "A01B",
"A01B", "A01B", "A01B", "A01B", "A01B", "A01B", "A01B", "A01B",
"A01B", "A01B", "A01B", "A01B", "A01B", "A01B", "A01B", "A01B",
"A01B", "A01B", "A01B", "A01B", "A01B", "A01B", "A01B", "A01B",
"A01B", "A01B", "A01B", "A01B", "A01B", "A01B", "A01B", "A01B",
"A01B", "A01B", "A01B"), Time = c(2000L, 2000L, 2000L, 2000L,
2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 2000L,
2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 2000L,
2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 2000L,
2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 2000L,
2000L, 2000L, 2000L, 2001L, 2001L, 2001L, 2001L, 2001L, 2001L,
2001L, 2001L, 2001L, 2001L, 2001L, 2001L, 2001L, 2001L, 2001L,
2001L, 2001L, 2001L, 2001L, 2001L, 2001L, 2001L, 2001L, 2001L,
2001L, 2001L, 2001L, 2001L, 2001L, 2001L, 2001L, 2001L, 2001L,
2001L, 2001L, 2001L, 2001L, 2001L, 2001L, 2001L, 2001L, 2001L,
2001L, 2002L, 2002L, 2002L, 2002L, 2002L, 2002L, 2002L, 2002L,
2002L, 2002L, 2002L, 2002L, 2002L, 2002L), Value.x = c(3.3333,
3.3333, 3.3333, 3.3333, 3.3333, 3.3333, 3.3333, 3.3333, 3.3333,
3.3333, 3.3333, 3.3333, 3.3333, 3.3333, 3.3333, 3.3333, 3.3333,
3.3333, 3.3333, 3.3333, 3.3333, 3.3333, 3.3333, 3.3333, 3.3333,
3.3333, 3.3333, 3.3333, 3.3333, 3.3333, 3.3333, 3.3333, 3.3333,
3.3333, 3.3333, 3.3333, 3.3333, 3.3333, 3.3333, 3.3333, 3.3333,
3.3333, 3.3333, 4.2143, 4.2143, 4.2143, 4.2143, 4.2143, 4.2143,
4.2143, 4.2143, 4.2143, 4.2143, 4.2143, 4.2143, 4.2143, 4.2143,
4.2143, 4.2143, 4.2143, 4.2143, 4.2143, 4.2143, 4.2143, 4.2143,
4.2143, 4.2143, 4.2143, 4.2143, 4.2143, 4.2143, 4.2143, 4.2143,
4.2143, 4.2143, 4.2143, 4.2143, 4.2143, 4.2143, 4.2143, 4.2143,
4.2143, 4.2143, 4.2143, 4.2143, 4.2143, 1.1944, 1.1944, 1.1944,
1.1944, 1.1944, 1.1944, 1.1944, 1.1944, 1.1944, 1.1944, 1.1944,
1.1944, 1.1944, 1.1944), LOCATION.y = c("AUS", "AUT", "BEL",
"CAN", "CZE", "DNK", "FIN", "FRA", "DEU", "GRC", "HUN", "ISL",
"IRL", "ITA", "JPN", "KOR", "LUX", "MEX", "NLD", "NZL", "NOR",
"POL", "PRT", "SVK", "ESP", "SWE", "CHE", "TUR", "GBR", "USA",
"BRA", "CHL", "CHN", "COL", "CRI", "EST", "IND", "IDN", "ISR",
"LVA", "LTU", "SVN", "ZAF", "AUS", "AUT", "BEL", "CAN", "CZE",
"DNK", "FIN", "FRA", "DEU", "GRC", "HUN", "ISL", "IRL", "ITA",
"JPN", "KOR", "LUX", "MEX", "NLD", "NZL", "NOR", "POL", "PRT",
"SVK", "ESP", "SWE", "CHE", "TUR", "GBR", "USA", "BRA", "CHL",
"CHN", "COL", "CRI", "EST", "IND", "IDN", "ISR", "LVA", "LTU",
"SVN", "ZAF", "AUS", "AUT", "BEL", "CAN", "CZE", "DNK", "FIN",
"FRA", "DEU", "GRC", "HUN", "ISL", "IRL", "ITA"), Country.y = c("Australia",
"Austria", "Belgium", "Canada", "Czech Republic", "Denmark",
"Finland", "France", "Germany", "Greece", "Hungary", "Iceland",
"Ireland", "Italy", "Japan", "Korea", "Luxembourg", "Mexico",
"Netherlands", "New Zealand", "Norway", "Poland", "Portugal",
"Slovak Republic", "Spain", "Sweden", "Switzerland", "Turkey",
"United Kingdom", "United States", "Brazil", "Chile", "China",
"Colombia", "Costa Rica", "Estonia", "India", "Indonesia", "Israel",
"Latvia", "Lithuania", "Slovenia", "South Africa", "Australia",
"Austria", "Belgium", "Canada", "Czech Republic", "Denmark",
"Finland", "France", "Germany", "Greece", "Hungary", "Iceland",
"Ireland", "Italy", "Japan", "Korea", "Luxembourg", "Mexico",
"Netherlands", "New Zealand", "Norway", "Poland", "Portugal",
"Slovak Republic", "Spain", "Sweden", "Switzerland", "Turkey",
"United Kingdom", "United States", "Brazil", "Chile", "China",
"Colombia", "Costa Rica", "Estonia", "India", "Indonesia", "Israel",
"Latvia", "Lithuania", "Slovenia", "South Africa", "Australia",
"Austria", "Belgium", "Canada", "Czech Republic", "Denmark",
"Finland", "France", "Germany", "Greece", "Hungary", "Iceland",
"Ireland", "Italy"), Value.y = c(3.3333, 0, 0, 0.6667, 0, 1.1429,
0.7333, 7.0667, 3.29, 0, 0, 0, 0, 1, 0.2, 1, 0, 0, 0.4762, 0,
3, 0, 0, 0, 0, 3, 0, 0, 2.5, 13.2, 0, 0, 0, 0, 0, 0, 0.5, 0,
0, 0, 0, 0, 1, 4.2143, 0.3333, 0, 0, 0, 3, 1, 2.5, 5.0833, 0,
0, 0, 0, 1.4167, 0.5667, 0, 0, 0.5, 1.6278, 0.5, 1, 0, 0, 0,
0, 0, 0, 0, 2.45, 9.1742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0.1, 1.1944, 0.5, 0.5, 2.3409, 0.0909, 0, 0.6, 8, 6.0286, 0,
0, 0, 0, 1.5)), row.names = c(NA, -100L), groups = structure(list(
IPC = "A01B", .rows = structure(list(1:100), ptype = integer(0), class = c("vctrs_list_of",
"vctrs_vctr", "list"))), row.names = c(NA, -1L), class = c("tbl_df",
"tbl", "data.frame"), .drop = TRUE), class = c("grouped_df",
"tbl_df", "tbl", "data.frame"))
作为对这些评论的回应,我添加了这个示例数据集用于教学目的。它应该可以使用@r2evans提供的代码。(它假定所列国家在2000年和2001年只有两个子维度A01B和A01C。)
structure(list(LOCATION.x = c("AUS", "AUS", "USA", "USA", "AUS",
"AUS", "USA", "USA"), Country.x = c("Australia", "Australia",
"United States", "United States", "Australia", "Australia", "United States",
"United States"), IPC = c("A01B", "A01C", "A01B", "A01C", "A01B",
"A01C", "A01B", "A01C"), Time = c(2000, 2000, 2000, 2000, 2001,
2001, 2001, 2001), Value.x = c(7, 42, 92, 1, 70, 87, 88, 3),
LOCATION.y = c("DEU", "DEU", "DEU", "DEU", "DEU", "DEU",
"DEU", "DEU"), Country.y = c("Germany", "Germany", "Germany",
"Germany", "Germany", "Germany", "Germany", "Germany"), Value.y = c(97,
85, 25, 14, 15, 97, 97, 52)), row.names = c(NA, -8L), class = c("tbl_df",
"tbl", "data.frame"))
提前表示感谢!
推荐答案
我认为您可以为此做一个简单的summarize
dat %>%
group_by(Country.x, Country.y) %>%
summarize(corr = cor(Value.x, Value.y)) %>%
filter(complete.cases(.))
# Warning in cor(Value.x, Value.y) : the standard deviation is zero
##### repeated 21 times
# # A tibble: 21 x 3
# # Groups: Country.x [1]
# Country.x Country.y corr
# <chr> <chr> <dbl>
# 1 Australia Australia 1
# 2 Australia Austria -0.539
# 3 Australia Belgium -0.959
# 4 Australia Canada -1.00
# 5 Australia Czech Republic -0.959
# 6 Australia Denmark 0.931
# 7 Australia Finland 0.911
# 8 Australia France -0.825
# 9 Australia Germany -0.550
# 10 Australia India -1
# # ... with 11 more rows
使用更多数据并希望将Time
添加到您的分组,然后使用
dat %>%
group_by(Time, Country.x, Country.y) %>%
summarize(corr = cor(Value.x, Value.y))
由于样本较小,此处不适用,但应适用于较大的数据。
这篇关于计算R中多年来所有国家/地区对的相关性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!