使用R统计起点-终点关系(无直接关系)
我有一个这样的起点-终点表使用R统计起点-终点关系(无直接关系),r,o-d-matrix,R,O D Matrix,我有一个这样的起点-终点表 library(dplyr) set.seed(1983) namevec <- c('Portugal', 'Romania', 'Nigeria', 'Peru', 'Texas', 'New Jersey', 'Colorado', 'Minnesota') ## Create OD pairs df <- data_frame(origins = sample(namevec, size = 100, replace = TRUE),
library(dplyr)
set.seed(1983)
namevec <- c('Portugal', 'Romania', 'Nigeria', 'Peru', 'Texas', 'New Jersey', 'Colorado', 'Minnesota')
## Create OD pairs
df <- data_frame(origins = sample(namevec, size = 100, replace = TRUE),
destinations = sample(namevec, size = 100, replace = TRUE))
一种方法是将两个位置的排序组合合并到一个字段中。在此基础上进行总结将删除两个原始列,因此您需要将它们重新合并
paired <- df %>%
mutate(
orderedpair = paste(pmin(origins, destinations), pmax(origins, destinations), sep = "::")
)
paired
# # A tibble: 100 × 3
# origins destinations orderedpair
# <chr> <chr> <chr>
# 1 Peru Colorado Colorado::Peru
# 2 Romania Portugal Portugal::Romania
# 3 Romania Colorado Colorado::Romania
# 4 New Jersey Minnesota Minnesota::New Jersey
# 5 Minnesota Texas Minnesota::Texas
# 6 Romania Texas Romania::Texas
# 7 Peru Peru Peru::Peru
# 8 Romania Nigeria Nigeria::Romania
# 9 Portugal Minnesota Minnesota::Portugal
# 10 Nigeria Colorado Colorado::Nigeria
# # ... with 90 more rows
left_join(
paired,
group_by(paired, orderedpair) %>% count(),
by = "orderedpair"
) %>%
select(-orderedpair) %>%
distinct() %>%
arrange(desc(n))
# # A tibble: 48 × 3
# origins destinations n
# <chr> <chr> <int>
# 1 Romania Portugal 6
# 2 New Jersey Minnesota 6
# 3 Portugal Romania 6
# 4 Minnesota New Jersey 6
# 5 Romania Texas 5
# 6 Nigeria Colorado 5
# 7 Texas Nigeria 5
# 8 Texas Romania 5
# 9 Nigeria Texas 5
# 10 Peru Peru 4
# # ... with 38 more rows
paired%
变异(
orderedpair=paste(pmin(起点,终点),pmax(起点,终点),sep=“:”)
)
成对的
##A tible:100×3
#来源目的地订购对
#
#秘鲁科罗拉多州:秘鲁
#2罗马尼亚葡萄牙葡萄牙::罗马尼亚
#3罗马尼亚科罗拉多州:罗马尼亚
#4新泽西明尼苏达州:新泽西州
#5明尼苏达州德克萨斯州明尼苏达州:德克萨斯州
#6罗马尼亚德克萨斯州罗马尼亚::德克萨斯州
#秘鲁:秘鲁
#8罗马尼亚尼日利亚:罗马尼亚
#9葡萄牙明尼苏达州:葡萄牙
#10尼日利亚科罗拉多州:尼日利亚
# # ... 还有90行
左联合(
成对的,
分组依据(成对、有序对)%>%count(),
by=“orderedpair”
) %>%
选择(-orderedpair)%>%
不同的()%>%
排列(描述(n))
##A tible:48×3
#出发地
#
#1罗马尼亚葡萄牙6
#2新泽西州明尼苏达州6
#3葡萄牙罗马尼亚6
#4明尼苏达州新泽西州6
#5罗马尼亚德克萨斯州5
#6尼日利亚科罗拉多州5
#7德克萨斯州-尼日利亚5
#8德克萨斯州罗马尼亚5
#9尼日利亚德克萨斯州5
#10秘鲁4
# # ... 还有38行
(我使用
”的唯一原因是:“
作为分隔符是在不太可能的情况下,您需要解析orderedpair
;使用默认的”
(空格)将无法与(例如混合中的“新泽西州”
)一起使用。)非常感谢!这正是我想要的:D、pmin和pmax是我错过的关键功能,它们当然非常方便。我发现自己操纵了类似的向量比较函数,将这两个函数建模。(例如,这里最近的一个问题非常需要pmean
和/或pmedian
)
paired <- df %>%
mutate(
orderedpair = paste(pmin(origins, destinations), pmax(origins, destinations), sep = "::")
)
paired
# # A tibble: 100 × 3
# origins destinations orderedpair
# <chr> <chr> <chr>
# 1 Peru Colorado Colorado::Peru
# 2 Romania Portugal Portugal::Romania
# 3 Romania Colorado Colorado::Romania
# 4 New Jersey Minnesota Minnesota::New Jersey
# 5 Minnesota Texas Minnesota::Texas
# 6 Romania Texas Romania::Texas
# 7 Peru Peru Peru::Peru
# 8 Romania Nigeria Nigeria::Romania
# 9 Portugal Minnesota Minnesota::Portugal
# 10 Nigeria Colorado Colorado::Nigeria
# # ... with 90 more rows
left_join(
paired,
group_by(paired, orderedpair) %>% count(),
by = "orderedpair"
) %>%
select(-orderedpair) %>%
distinct() %>%
arrange(desc(n))
# # A tibble: 48 × 3
# origins destinations n
# <chr> <chr> <int>
# 1 Romania Portugal 6
# 2 New Jersey Minnesota 6
# 3 Portugal Romania 6
# 4 Minnesota New Jersey 6
# 5 Romania Texas 5
# 6 Nigeria Colorado 5
# 7 Texas Nigeria 5
# 8 Texas Romania 5
# 9 Nigeria Texas 5
# 10 Peru Peru 4
# # ... with 38 more rows