R - 比较两列中相同值的两个不同长度的数据帧

标签 r compare

这是一个关于如何比较不同长度的两个不同数据帧的几列的问题。

我有两个不同长度的数据帧(来自receiver1(rec1)和receiver2(rec2)的数据),包含4艘不同船只的位置:

rec1 <- data.frame(name = sample (c("Nina", "Doug", "Alli", "Steve"), 20, replace = TRUE), 
                lon = sample (1:20), 
                lat = sample (1:10)
                )    
rec2 <- data.frame(name = sample (c("Nina", "Doug", "Alli", "Steve"), 30, replace = TRUE), 
                lon = sample (1:30),
                lat = sample (1:30)
                )

它们包含不同的名称(船舶名称,两者名称相同)和经度 (lon) 以及纬度 (lat) 坐标。

我试图比较两个 dfs 以查看每艘船在“lon”和“lat”匹配中有多少个值(即两个接收器接收相同位置的频率)

基本上我试图找出每个接收器有多好以及有多少数据点重叠(例如百分比)。

我不确定如何最好地做到这一点,我愿意接受任何建议。非常感谢!!!

最佳答案

这是一个经过修改且可重现的测试用例以及我的答案。我设计的测试集包括匹配的组合和一些不匹配的组合。

rec1 <- data.frame(shipName = rep(c("Nina", "Doug", "Alli", "Steve"), each = 5), 
                lon = rep.int(c(1:5), 4), 
                lat = rep.int(c(11:15), 4)
                )    
rec2 <- data.frame(shipName = rep(c("Nina", "Doug", "Alli", "Steve"), each = 7), 
                lon = rep.int(c(2, 3, 4, 4, 5, 5, 6), 4),
                lat = rep.int(c(12, 13, 14, 14, 15, 15, 16), 4)
                )

print(rec1)
print(rec2)

#Merge the two data frames together, keeping only those combinations that match
m <- merge(rec1, rec2, by = c("shipName", "lon", "lat"), all = FALSE)

print(m)

如果要计算每个组合出现的次数,请尝试以下操作。 (有不同的聚合方法。有些是 here 。下面是我的首选方法,它要求您安装 data.table。这是一个很棒的工具,所以如果您还没有安装它,您可能想安装它。)
library(data.table)

#Convert to a data table and optionally set the sort key for faster processing
m <- data.table(m)
setkey(m, shipName, lon, lat)

#Aggregate and create a new column called "Count" with the number of
    #observations in each group (.N)
m <- m[, j = list("Count" = .N), by = list(shipName, lon, lat)]

print(m)

#If you want to return to a standard data frame rather than a data table:
m <- data.frame(m)

关于R - 比较两列中相同值的两个不同长度的数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29979851/

相关文章:

R Shiny : checkBox format

R dplyr - 使用按列分组的 rollmean

r - 在函数中修改后,第一次调用时不显示 data.table

php比较/区分一个数组和一个对象数组

php - 比较两个整数

javascript - 这个 JavaScript 数字比较函数实际上是如何工作的?

java - 如何从文本文件加载文本并与另一个文本文件进行比较?

python-3.x - 我想将国家列表与列数据进行比较,列数据是 pandas 数据框 Python 中的字典对象类型

r - 是否有一个简单的命令可以使用 lm() 函数进行留一法交叉验证?

html - 如何使用 Google 电子表格作为后端创建 HTML 数据输入表单