R 比较具有不同行长度的两个不同数据帧的两列,返回第三行

R 比较具有不同行长度的两个不同数据帧的两列,返回第三行,r,dataframe,foreach,compare,conditional-statements,R,Dataframe,Foreach,Compare,Conditional Statements,我有两个不同的df,它们有相同的列:“O”表示地点,“date”表示时间。 Df 1在一行中给出了特定地点(O)和时间(日期)的不同信息,Df 2在同一年中有许多信息,在许多不同的行中有许多位置信息。否我想提取第一个df的一个条件,如果“O”和“date”的值相等,则该条件适用于第二个df的所有行 更清楚地说: 我在df1中有一行:krnqm=250表示O=1002,date=1885。现在,我希望在df2中有一个新列“krnqm”,其中df2$krnqm=250用于所有行,其中df2$0=10

我有两个不同的df,它们有相同的列:“O”表示地点,“date”表示时间。 Df 1在一行中给出了特定地点(O)和时间(日期)的不同信息,Df 2在同一年中有许多信息,在许多不同的行中有许多位置信息。否我想提取第一个df的一个条件,如果“O”和“date”的值相等,则该条件适用于第二个df的所有行

更清楚地说: 我在df1中有一行:krnqm=250表示O=1002,date=1885。现在,我希望在df2中有一个新列“krnqm”,其中df2$krnqm=250用于所有行,其中df2$0=1002和df2$date=1885


不幸的是,我不知道如何将该条件放入代码行中,非常感谢您的帮助

在base R中使用merge函数可以很容易地做到这一点。这里有一个例子

根据您的描述模拟一些数据:

df1 <- expand.grid(O = letters[c(2:4,7)], date = c(1,3))
df2 <- data.frame(O = rep(letters[1:6], c(2,3,3,6,2,2)), date = rep(1:3, c(3,2,4)))
df1$krnqm <- sample(1:1000, size = nrow(df1), replace=T)

> df1
  O date krnqm
1 b    1   833
2 c    1   219
3 d    1   773
4 g    1   514
5 b    3   118
6 c    3   969
7 d    3   704
8 g    3   914
> df2
   O date
1  a    1
2  a    1
3  b    1
4  b    2
5  b    2
6  c    3
7  c    3
8  c    3
9  d    3
10 d    1
11 d    1
12 d    1
13 d    2
14 d    2
15 e    3
16 e    3
17 f    3
18 f    3

df1欢迎来到堆栈溢出!帮助他人帮助你:提供帮助。你可以查一下小费。特别是,您应该使用R命令的输出
dput()?如果不想保留krnqm为空的行(即不匹配的行),只需添加
%>%过滤器(!is.na(krnqm))
df2 <- merge(df2, df1, all.x=T)
> df2
   O date krnqm
1  a    1    NA
2  a    1    NA
3  b    1   833
4  b    2    NA
5  b    2    NA
6  c    3   969
7  c    3   969
8  c    3   969
9  d    1   773
10 d    1   773
11 d    1   773
12 d    2    NA
13 d    2    NA
14 d    3   704
15 e    3    NA
16 e    3    NA
17 f    3    NA
18 f    3    NA