我想要创建一个高效的ifelse语句,这样如果来自df2的列与来自df1的列匹配,那么df2中的该行将以特定的方式编码。我的代码可以工作,但是效率很低。
示例数据:
Df1
A
[计][111]准商品
[经][111]准.=
1.=‘5’>.=‘5’>.
112
112
113
Df2
A/C/C/B/B
112.=‘3’>再
111/55/2/2
113.=‘3’>再
111/55/5
111/55/2/7
112.=‘3’>再
预期结果:
Df2
A
112
[计][111]准商品
113
[经][111]准.=
1.=‘5’>.=‘5’>.
112
我所做的是:
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,这样就不需要手动输入每个组合了吗?
发布于 2019-04-23 23:50:15
这通常是通过连接来完成的。来自dplyr的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 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 6https://stackoverflow.com/questions/55820422
复制相似问题