R - 使用一个表中的连续行(单元格)值来筛选另一个表中的行(单元格)值

问题描述 投票:0回答:1

我有两个数据框 - df1 有 52000 行,df2 有 24000 行

我需要处理 df1.column 2 中的每个值,并逐行检查它是否出现在 df2 中的任何位置。

如果是,则将 df2 中的整行添加到新的数据框中。

我设置了两个带有少量示例数据的虚拟表:

这是 df1

年份 饮料
1985
1935 咖啡
2015 啤酒
2012
2017
1958 苏打水

这是 df2

年份 国家
1985 美国
1955 法国
2015 中国
2011 美国
2017 英国
1958 英国

第 1 步 - 从 df1 中读取 col1 第 1 行单元格 - 它显示为 1985。

第 2 步 - 依次处理 df2 col1 行值 - 如果有 1985 年。将整行复制到新的数据框。如果没有,请忽略该行并继续。

重复步骤 1 和步骤 2,直到 df2 中所有行的末尾。

我已经尝试过:

YearComparison <- df1[df1$year %like% df2, ]

但我收到错误:

Warning message: In grepl(pattern, vector, ignore.case = ignore.case, fixed = fixed) : argument 'pattern' has length > 1 and only the first element will be used

我也尝试过:

YearComparison <- df1[df1$year %like% df2,1 ]

返回:

姓名 类型 价值
年份比较 双[0]

我也尝试过:

YearComparison <- any(grepl('patientdata$status', countries$year,))

返回:

姓名 类型 价值
年份比较 逻辑[1] 错误

我也尝试过使用

%in%
进行变体,但结果相似。

请记住,在我的实际数据集中,我有数万行,它们是复杂的非顺序字符串(不是日期 - 我在这里只是为了方便完善代码而使用它),所以像:

YearComparison <- df1[df1$year %like% df2, c("1985", "1986","Etc"), ]
不实用。

有人可以帮忙吗?非常感谢。

r dataframe filtering grepl
1个回答
0
投票

我猜,你需要改变连接函数。

df1 <- data.frame(Year = c(1985, 1935, 2015),
                  Drink = c("tea", "coffee", "beer"))

df2 <- data.frame(Year = c(1985, 1955, 2015),
                  Country = c("USA", "France", "China"))
df1
df2


library(dplyr)

df3 <- df1 %>% 
  inner_join(df2, by = c("Year" = "Year"))

df3
© www.soinside.com 2019 - 2024. All rights reserved.