繁体   English   中英

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

[英]R: ifelse loop across multiple dataframes

我想创建一个有效的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


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,从而不必手动键入每个组合?

通常,这可以通过联接来完成。 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(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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM