根据r [duplicate]中的列从一个dataframe到另一个dataframe获取数据

3b6akqbq  于 2023-04-03  发布在  其他
关注(0)|答案(3)|浏览(193)

此问题在此处已有答案

(13个答案)
4天前关闭。
我有一个数据框看起来像这样

df1
          x           y             Classification
    1   567610  5934630                0
    2   567630  5934630                0
    3   567530  5934610                0
    4   567492.7 5934585               0
    5   567493.3 5934585               0
    6   567492.3 5934584               0
    7   567492.8 5934584               0
    8   567590 5934610                 0

还有一个

df2
     x       y     V1   
1  567610 5934630 16.153   
2  567630 5934630 20.450   
3  567530 5934610  1.175

预期产出

df2
        x       y     V1      classification
    1  567610 5934630 16.153     0
    2  567630 5934630 20.450     0
    3  567530 5934610  1.175     0

我累了,但它不工作

df2 %>% 
  rows_patch(semi_join(df1,df2, by = "x"))

Error in `semi_join()`:
! Input columns in `y` must be unique.
✖ Problem with `x`, `y`, and `V1`.
Run `rlang::last_error()` to see where the error occurred.

我想比较两个dataframe中的x和y,如果它们彼此匹配,则得到df2的分类。df2的所有x和y都来自df1,因此它们都将匹配。我只需要从df1到df2的分类。

zd287kbt

zd287kbt1#

您可以使用left_join而不是rows_patch,如下所示:

library(dplyr)
df2 %>% 
  left_join(semi_join(df1,df2, by = "x"))
#> Joining with `by = join_by(x, y)`
#>        x       y     V1 Classification
#> 1 567610 5934630 16.153              0
#> 2 567630 5934630 20.450              0
#> 3 567530 5934610  1.175              0

创建于2023-03-29带有reprex v2.0.2

cwtwac6a

cwtwac6a2#

使用dplyr

library(dplyr)

df2 %>%
  left_join(df1, by = c("x", "y"))

使用data.table

library(data.table)
setDT(df1)
setDT(df2)

df2[df1, on = c("x", "y"), nomatch = 0]

结果

x       y     V1 Classification
1: 567610 5934630 16.153              0
2: 567630 5934630 20.450              0
3: 567530 5934610  1.175              0
vjhs03f7

vjhs03f73#

您可以在两个dfs之间连接两个列:

left_join(df2, df1, by=c('x'='x', 'y'='y'))
       x       y     V1 Classification
1 567610 5934630 16.153              0
2 567630 5934630 20.450              0
3 567530 5934610  1.175              0

相关问题