使用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