【发布时间】:2018-03-21 05:23:33
【问题描述】:
我有一个大型数据集,通过一个分组变量 = grp 分为许多小组;一个组的所有成员按照较大数据集的顺序是连续的。每个组的成员都有一个 id 代码 (= id) 并从 1 开始按顺序编号。在一个组中,一些成员满足逻辑标准 = is_child。每个成员都有一个变量 (momloc),其中包含零或另一个组成员的 ID 号(如果存在,则为母亲)。
我希望将 momloc 与其 ID 相同的组成员的数量分配给数据集中的每个人,如果没有,则为零。我正在尝试在 dplyr 中执行此操作,因为我在那里设置了组,并且我有可以工作的代码,但它是嵌套 ifelse 函数的 Rube Goldberg 装置,它为中间值添加了两个额外的列,其中一个包含一个向量,遍历数据集 3 次,速度非常慢。必须有比这更好的方法。我纠结于 mutate、处理行和摘要、处理组的不同语法。
以下是简化的数据集和预期结果
grp <- c(1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2)
id <- c(1, 2, 3, 4, 1, 2, 3, 4, 5, 6, 7)
is_child <- c(0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0)
momloc <- c(0, 0, 2, 2, 0, 0, 0, 3, 2, 2, 2)
data <- tibble(grp, id, is_child, momloc)
想要的输出:
out = c(0, 2, 0, 0, 0, 2, 1, 0, 0, 0, 0)
【问题讨论】:
-
我很难理解
out背后的逻辑。你能解释一下为什么out[2] = 2和out[7] = 1吗?我也看不到is_child的来源。 -
没关系。 @akrun 的回答很清楚;-)
-
@MauritsEvers 我想我错过了那里的
1。 @andrewH 最好显示创建所需输出的代码