[英]R: Trouble using ifelse to run multiple logical tests across dataframes to create new column
[英]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_join
的dplyr
将把第一张表中的每一行与第二张表中的所有匹配行连接起来。
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.