首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >比较两个数据帧中的列并相应地修改原始数据框架

比较两个数据帧中的列并相应地修改原始数据框架
EN

Stack Overflow用户
提问于 2013-09-29 14:41:40
回答 1查看 177关注 0票数 0

我有两个数据:

df1:

代码语言:javascript
运行
复制
k1  k2       k3         k4
1   Alfred   Hitchcock  0
2   Claude   Renoir     0
3   Jean     Renoir     0
4   Louis    Mallet     0
5   Louis    Jouvet     0

和df2:

代码语言:javascript
运行
复制
k1  k2       k3 
1   Paul     Newman
2   Alfred   Hitchcock
3   Ernst    Jünger

我想找到一种方法来比较我的两个数据帧的k2和k3列。如果有一个重复的项目,相对于k2和k3,从df1到df2 (这里df1的第一个条目"Alfred"/"Hitchcock“与df2的第二个条目相匹配),我想更新k4。我希望得到这样的结果:

代码语言:javascript
运行
复制
k1  k2       k3         k4
1   Alfred   Hitchcock  1
2   Claude   Renoir     0
3   Jean     Renoir     0
4   Louis    Mallet     0
5   Louis    Jouvet     0

我考虑过使用简单的指令,比如:

代码语言:javascript
运行
复制
df1$k4 [df1$k2 %in% df2$k2 & df1$k3 %in% df2$k3] <- 1

但这不管用。我还考虑过使用merge()指令,但它似乎无法帮助我(我并不特别需要合并我的数据框架)。

我想我可以用SQL来处理,但是R不能.我试过sqldf,但是它不适用于外部和完全连接。

P.S.:由于我的数据帧非常大,所以我尽量不使用循环。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-29 15:16:13

(1)尝试如下:

代码语言:javascript
运行
复制
transform(df1, k4 = k4 + paste(k2, k3) %in% paste(df2$k2, df2$k3))

(2)或此:

代码语言:javascript
运行
复制
library(sqldf)
sqldf("select df1.k1, k2, k3, k4 + (df2.k1 is not null) k4 
       from df1 left join df2 
       using (k2, k3)")

给予:

代码语言:javascript
运行
复制
  k1     k2        k3 k4
1  1 Alfred Hitchcock  1
2  2 Claude    Renoir  0
3  3   Jean    Renoir  0
4  4  Louis    Mallet  0
5  5  Louis    Jouvet  0

更新:添加了第二个解决方案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19079315

复制
相关文章

相似问题

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