我有一个 R 问题,我什至不知道如何用一句话来表达,但还找不到答案。
我有两个数据框,我想“相交”并找到列值匹配的所有行two列。我尝试用 && 连接两个 intersect() 和 which() 语句,但都没有给我我想要的东西。
这就是我的意思。假设我有两个数据框:
> testData
Email Manual Campaign Bounced Opened Clicked ClickThru Unsubscribed
1 [email protected] EIFLS0LS 1 0 0 0 0 0
2 [email protected] EIFLS0LS 1 0 0 0 0 0
3 [email protected] EIFLS0LS 1 0 0 0 0 0
4 [email protected] EIFLS0LS 1 0 0 0 0 0
5 [email protected] EIFLS0LS 1 0 0 0 0 0
6 [email protected] EIFLS0LS 1 0 0 0 0 0
> testBounced
Email Campaign
1 [email protected] 1
2 [email protected] 2
3 [email protected] 2
4 [email protected] 1
5 [email protected] 1
6 [email protected] 1
正如您所看到的,“电子邮件”列中有一些相交的值,以及“营销活动”列中有一些相交的值。我想要 testData 中两列都匹配的所有行。
ie:
Email Manual Campaign Bounced Opened Clicked ClickThru Unsubscribed
1 [email protected] EIFLS0LS 1 0 0 0 0 0
2 [email protected] EIFLS0LS 1 0 0 0 0 0
3 [email protected] EIFLS0LS 1 0 0 0 0 0
EDIT:
我查找这些列的目标是能够更新原始列中的行。所以我想要的最终输出是:
> testData
Email Manual Campaign Bounced Opened Clicked ClickThru Unsubscribed
1 [email protected] EIFLS0LS 1 1 0 0 0 0
2 [email protected] EIFLS0LS 1 0 0 0 0 0
3 [email protected] EIFLS0LS 1 0 0 0 0 0
4 [email protected] EIFLS0LS 1 1 0 0 0 0
5 [email protected] EIFLS0LS 1 1 0 0 0 0
6 [email protected] EIFLS0LS 1 0 0 0 0 0
如果这是重复的,我深表歉意,并提前感谢您的帮助!
EDIT2::
我最终只使用了一个 for 循环,没什么了不起的,但感觉效率不高。不过,数据集足够小,可以快速完成。如果有人有一种快速的、R 风格的方法来做到这一点,我会很高兴看到它!
你想要的功能merge
.
merge
通常用于通过一个相似的公共表来合并两个表,但是by
参数可以允许多列:
merge(testData, testBounced, by=c("Email", "Campaign"))
所有对Email
and Campaign
不匹配的将被默认丢弃。这是可以通过参数控制的all.x
and all.y
,默认为FALSE
.
默认参数为by
is intersect(names(x, y))
,因此从技术上讲,在这种情况下您不需要指定列,但这对于清晰起见很有好处。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)