R:跨多个数据帧的ifelse循环

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

我想创建一个有效的ifelse语句,这样如果来自df2的列与df1中的列匹配,那么df2中的该行将以特定方式编码。我的代码有效,但效率很低。

示例数据:

DF1

A B C 111 2 1 111 5 2 111 7 3 112 2 4 112 8 5 113 2 6

DF2

一个B. 112 2 111 2 113 2 111 5 111 7 112 8

期望的结果:

DF2

A B C 112 2 4 111 2 1 113 2 6 111 5 2 111 7 3 112 8 5

我做的是这样的: Df2$C<- ifelse(Df2$A == 111 & Df2$B == 2, 1, 0) Df2$C<- ifelse(Df2$A == 111 & Df2$B == 5, 2, 0) Df2$C<- ifelse(Df2$A == 111 & Df2$B == 7, 3, 0) ...

这是有效的,但有没有办法使df2可以引用df1中的列并创建列df2 $ C,这样每个组合都不必手动输入?

r loops dataframe if-statement
1个回答
2
投票

这通常通过连接完成。来自left_joindplyr会将第一个表中的每一行与第二个表中的每个匹配行相连接。

https://dplyr.tidyverse.org/reference/join.html

library(dplyr)
Df2 %>% left_join(Df1)

Joining, by = c("A", "B")
    A B C
1 112 2 4
2 111 2 1
3 113 2 6
4 111 5 2
5 111 7 3
6 112 8 5

来自基础R的merge将给出类似的结果,但不保留原始行顺序而不进行一些额外的争论。

Merge two data frames while keeping the original row order

merge(Df2, Df1)
    A B C
1 111 2 1
2 111 5 2
3 111 7 3
4 112 2 4
5 112 8 5
6 113 2 6
© www.soinside.com 2019 - 2024. All rights reserved.