我有两个数据框 - 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"), ]
不实用。
有人可以帮忙吗?非常感谢。
我猜,你需要改变连接函数。
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