如何根据列和施加条件匹配数据帧?

杰克

我有两个数据框。这是一个例子:

x <- rep(c(0,1),3)
y <- c(1999,2000,2001,2002,2001,2002)
z <- data.frame(x,y)
x1 <- rep(0,12)
y1 <- c(1998,1999,1999,2000,1999,2001,1999,2000,2001,2002,2001,2002)
z1 <- data.frame(x1, y1)

基本上,newdf的计算方式是我们选择z的两行(行1和2)并按年份在帧z1中找到匹配项,然后选择z的后两行(行3和行4)并再次找到匹配项在z1中(按年份)。函数合并将执行匹配的所有可能组合,但是,我希望z的每两个连续行都不会重复两次。

newdf =(0  1999
        0  2000
        0  2001
        0  2002
        0  2001
        0  2002)

任何建议都是宝贵的。

布罗迪

假设您要执行的操作是从中抓取两行z,将它们匹配以z1找到每个匹配的第一个符合条件的匹配,然后z和中删除已经匹配的行z1,这是一个解决方案:

new.df <- data.frame(x=integer(), y=integer())
while(nrow(z) > 0) {
  match.1 <- match(z$y[1], z1$y1)
  match.2 <- match(z$y[2], z1$y1)
  new.df <- rbind(new.df, z1[match.1, ], z1[match.2, ])
  z <- z[-(1:2), ]
  z1 <- z1[-c(match.1, match.2), ]
}
row.names(new.df) <- NULL
new.df
#    x1   y1
#  1  0 1999
#  2  0 2000
#  3  0 2001
#  4  0 2002
#  5  0 2001
#  6  0 2002

这与您期望的输出匹配,但是由于所有x1值均为0 ,因此您的期望输出是超级模棱两可的。如果您的第一列z1具有更多可区分的值以帮助推断您想要的内容,那么会容易得多。

另外,如果其中的值z不在中z1,或者z行数不为偶数,这将中断,但是我将添加逻辑以将其修复为您。此外,如果要对zs执行此操作,则需要预先调整大小new.df并替换为索引,而不是rbind像我在此处所做的那样,因为那样会变得很慢。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果根据数据帧的行和列值满足特定条件,如何获取列标题?

匹配数据帧中的值和连接结果

根据多种条件匹配数据框的行

基于作为子集的列值匹配数据帧

如何从匹配数据创建列?

如何根据2列之间的条件连接数据帧

遍历数据帧中的列以替换数据帧列表中匹配数据的值

如何使用R根据匹配查找数据帧替换数据帧的多个列中的因子水平

如何根据一系列值匹配数据

如何根据匹配数据从csv中删除行

excel如何使用索引和匹配来匹配数据

条件匹配数据框中的列时交换行?

R:匹配数据帧中的值

R-匹配数据帧

比较数据帧并输出计数匹配数

如何在两个文件中查找和计算ID列的匹配数据?

在匹配数据框和向量的行时如何提取列索引

通过R中的行名和列匹配数据

匹配数据的搜索列

如何使用awk选择和提取匹配数据?

如何根据来自同一数据帧的多个列中的多个条件在数据帧中创建新列

如何根据满足的两个条件之一创建列/索引(以在同一数据帧内实现匹配对的聚类)?

当两个数据帧的列和索引完全相同时,如何通过匹配另一个数据帧的条件来对一个数据帧的数据进行分组?

如何根据列名分配数据框列类?

根据选择的偏好匹配数据

根据匹配数据填充行

基于匹配行条件和共享列合并两个数据帧

如何根据索引然后根据条件选择数据帧的行?

如何根据另一个数据帧 Python3 的条件删除数据帧中的列