首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:如果是跨多个数据文件的循环

R:如果是跨多个数据文件的循环
EN

Stack Overflow用户
提问于 2019-04-23 22:50:19
回答 1查看 140关注 0票数 0

我想要创建一个高效的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,这样就不需要手动输入每个组合了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-23 23:50:15

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

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

代码语言:javascript
复制
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

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55820422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档