我有一系列广告系列投放数据。我想提取在2008年和2012年贡献的贡献者,同时保持选举类型 - 我不想删除这些年前的字母 - P和G.例如,注意AARONSON PAUL如何在P2008,G2008中做出贡献和G2012:
cand_nm party_id contbr_nm contb_receipt_amt election_tp
Obama Barack D AARONSON PAUL 250 P2008
Obama Barack D AARONSON PAUL 100 G2008
Obama Barack D AARONSON PAUL 500 G2008
Obama Barack D AARONSON PAUL 500 G2008
Obama Barack D AARONSON PAUL 500 G2012
Obama Barack D AARONSON PAUL 281 G2012
Obama Barack D AARONSON PAUL 219 G2012
我想提取像这样的贡献者。我的数据集最初是两个:8和12之前我将它们合并为1.所以我知道在2008年贡献的21.6%,因为:2012年贡献了:
length(unique(data$contbr_nm)) = 192022
length(unique(eight$contbr_nm)) = 123792
length(unique(twelve$contbr_nm)) = 95005
((123792+95005)-192022)/(123792) = 0.2162902
但是我如何实际上对这些贡献者进行子集化。我觉得应该有办法用ddply或sqldf做到这一点。
答案 0 :(得分:2)
library(dplyr)
library(tidyr)
data %>%
mutate(year = extract_numeric(election_tp)) %>%
group_by(contbr_nm) %>%
filter(n_distinct(year) == 2)
它创建一个仅包含年份值的新变量,然后仅针对具有该新变量的两个不同值的贡献者进行过滤。
答案 1 :(得分:0)
我创建了一个显示包含/排除
的快速示例library(data.table)
data <- data.table(year = c("P2008","G2008","G2012", "G2008", "G2012"), name = c("x","x","x","yy","zz"), rnd = runif(5))
# You should use data <- data.table(data) here
setkey(data,name)
data[name == unique(merge(data[substr(year,2,5) == "2008"],data[substr(year,2,5) == "2012"])[["name"]])]
打破这种局面,我内心地加入了所有2008年价值的数据表,其中包含2012年的所有价值,这些价值会返回每年存在的所有名称。然后我删除重复项,并将我的初始data.table与此唯一列表中的名称进行子集化。
答案 2 :(得分:0)
如果你提供样本输出会更清楚,但假设你想列出2008年和2012年贡献者的贡献:
sqldf SQL支持$(function(){
var network = $('.social-networks li a'),
animateTime = 75,
navLink = $('.social-networks li a');
navLink.hover(function(){
var $this = $(this);
if($this.width() === 32){
autoWidthAnimate($this, animateTime);
} else {
$this.stop().animate({ width: '32' }, animateTime);
}
});
})
function autoWidthAnimate(element, time){
var curWidth = element.width(), // Get default width
autoWidth = element.css('width', 'auto').width(); // Get auto width
element.width(curWidth); // Reset to default width
element.stop().animate({ width: autoWidth }, parseInt(time)); // Animate to auto width
}
其中like
是通配符:
%
,并提供:
library(sqldf)
sqldf("select distinct contbr_nm
from (select contbr_nm from DF where election_tp like '%2008')
join (select contbr_nm from DF where election_tp like '%2012')
using (contbr_nm)")
grepl / intersect / subset 这也可以使用 contbr_nm
1 AARONSON PAUL
,intersect
和grepl
来完成。没有使用包裹:
subset
注意在上文中,我们将其用作intersect(subset(DF, grepl('2008', election_tp))$contbr_nm,
subset(DF, grepl('2008', election_tp))$contbr_nm)
:
DF