将雌雄同体的姓名和每年在R中的数据框中的金额分组

将雌雄同体的姓名和每年在R中的数据框中的金额分组,r,dataframe,split-apply-combine,R,Dataframe,Split Apply Combine,我有一个数据框,有4列,标题为“年份”“名称”“性别”“金额”。下面是一个示例数据集 set.seed(1) data = data.frame(year=sample(1950:2000, 50, replace=TRUE),name=sample(LETTERS, 50, replace=TRUE), sex=sample(c("M", "F"), 50, replace=TRUE), amount=sample(40:100, 50,

我有一个数据框,有4列,标题为“年份”“名称”“性别”“金额”。下面是一个示例数据集

set.seed(1)
    data = data.frame(year=sample(1950:2000, 50, replace=TRUE),name=sample(LETTERS, 50, replace=TRUE),
                       sex=sample(c("M", "F"), 50, replace=TRUE), amount=sample(40:100, 50, replace=TRUE))
我只想找到同时以“m”和“f”出现的名称,并对每年的金额求和


任何帮助都将不胜感激

我对数据做了一些更改,以便在几年内有通用名称。通过目视检查,这似乎有效。如果您不熟悉
数据,语法可能会显得有点晦涩。表
,但它很简洁,应该非常有效:

require(data.table)
set.seed(1)
data = data.frame(year=sample(1950:1960, 100, replace=TRUE),name=sample(LETTERS, 100, replace=TRUE),
                  sex=sample(c("M", "F"), 100, replace=TRUE), amount=sample(40:100, 100,  replace=TRUE))
setDT(data) ## change to data.table format
data[, common=sum(amount[name %in% intersect(name[sex=="M"], name[sex=="F"])]), by=year]

聚合(金额~姓名+性别,数据[数据$year==1950,],总和)
?在这种情况下,1950年似乎没有女性。哦,实际上这可能会有所不同,因为您使用了
sample
请在使用
sample
时使用
set.seed
,以便我们可以使用与您使用的数据完全相同的数据抱歉,我的问题有点不清楚-我想返回每年的雌雄同体姓名的总和,因此,我一眼就能看到某一年出生的雌雄同体的名字数量。您的代码返回:姓名性别金额R F 69因为R是1950年出现的唯一名称我不确定代码是否有效。我尝试在自己的数据帧上聚合(amount~name+sex,data[data$year,]sum),它返回3列'name'、'sex'、'amount',但缺少'year'列,并且'sex'列中的所有值都是'f'?我们将继续得到不匹配的结果,直到添加
set.seed(1)
到文章中代码的顶部,然后再次创建
数据集。正如我所说,这是使用
sample
的结果。感谢在Now中编辑谢谢您的回答:)示例数据上的代码返回两列“year”和“v1”,我想v1是以“m”和“f”出现的名称的总和?当我在自己的数据框上运行它时,它会返回第一个和最后5年。这很好-如果我决定将信息绘制为图表,那么所有年份都会出现吗?这只是
data.table
的打印方法。数据都在那里,您可以将其用作普通的
data.frame
,也可以将其转换为
as.data.frame()
。更清楚的是,这只会添加在给定年份中女孩和男孩共有的名字。如果一个名字在一年中用于女孩,在另一年中用于男孩,那么它就不被计算在内。