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

时间:2015-05-01 00:14:24

标签: 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)以及纬度(纬度)坐标。

我试图比较两个dfs,看看“lon”和“lat”中每个容器匹配多少个值(即两个接收器拾取相同位置的频率)

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

我不确定这是如何做得最好的,我愿意接受任何建议。非常感谢!!!

1 个答案:

答案 0 :(得分:1)

在基本R中进行此比较的最简单方法是使用merge

试试这个:

# Set the RNG so sample() produces the same output and this example is reproducible
set.seed(720) 

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)
            )

merged <- merge(x = rec1,
                y = rec2,
                by = c("name","lat","lon"))

print(merged)

合并的数据框将包含所有三列匹配的所有情况(在本例中为1)。然后,您可以执行table(merged$name)之类的操作来计算每个名称在合并数据中出现的次数。

虽然,你的问题让我感到疑惑......这里肯定有某种时间元素,是吗?如果在数据中包含测量时间,则可以通过 name time 进行合并,然后计算测量的 lat lon < / em>差异。

修改:

如果我没有提到令人难以置信的dplyr套餐,我觉得我会失职,这使得这样的分析非常简单。使用这个简单的单行程序可以实现上述唯一名称值的合并和计数:

inner_join(rec1, rec2) %>% count(name)