【发布时间】:2021-05-22 07:46:36
【问题描述】:
这是我关于堆栈溢出的第一个问题,所以如果需要更多信息来回答这个问题,请告诉我。我最近才开始学习 R,所以请您耐心等待。
我有一个数据框 Df1,我想根据两个同时条件对其进行子集化/过滤:
- 公司代码是否也存在于 Df2 中?
- 在这种情况下,两个数据框的日期是否也相同?
我试过下面的代码
Sub <- subset(Df1, Df1$CompanyCode %in% Df2$CompanyCode & year(Df1$Date) %in% Df2$Year)
我想我知道问题出在哪里,但我不知道如何解决它。我认为上面的公式分别检查“%in%”条件,因此返回到许多情况。
举一个具体的例子(见下文;编辑:现在要求作为 dput 输出):它会 预计在我的结果中 Df1 中没有第 4 行因为 Df2 中没有匹配的大小写。但是,它是结果子集的一部分。我猜是因为它可以单独找到公司代码和日期的匹配项,即它可以在 Df" 中找到公司“B”,并且可以在 Df2 中找到 2016 年。但是,这不是我想要什么,因为没有完美的匹配,同时满足这两个条件。
Df1(输入1):
structure(list(CompanyCode = c("A", "A", "B", "B", "C", "D"),
Date = structure(c(16800, 17166, 16800, 17166, 16800, 17166
), class = "Date")), row.names = c(NA, -6L), class = "data.frame")
Df2(输入 2):
structure(list(CompanyCode = c("A", "A", "B", "C", "D"), Year = c(2015L,
2016L, 2015L, 2015L, 2016L)), class = "data.frame", row.names = c(NA,
-5L))
子(实际输出):
structure(list(CompanyCode = c("A", "A", "B", "B", "C", "D"),
Date = structure(c(16800, 17166, 16800, 17166, 16800, 17166
), class = "Date")), row.names = c(NA, 6L), class = "data.frame")
ExpectedSub(预期输出):
structure(list(CompanyCode = c("A", "A", "B", "C", "D"), Date = structure(c(16800,
17166, 16800, 16800, 17166), class = "Date")), row.names = c(NA,
-5L), class = "data.frame")
如果您能在这里帮助我,我将不胜感激。希望这个例子能说明我的问题。
非常感谢!
【问题讨论】:
-
请将您的输入数据提供为
dput()的输出,而不是图像。 -
请发布您的预期输出
标签: r dataframe filtering subset