这是一个关于如何比较不同长度的两个不同数据帧的几列的问题。
我有两个不同长度的数据帧(来自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”中每个容器匹配多少个值(即两个接收器拾取相同位置的频率)
基本上我试图找出每个接收器有多好以及有多少数据点重叠(例如百分比)。
我不确定这是如何做得最好的,我愿意接受任何建议。非常感谢!!!
答案 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)