如何根据数据集信息将值归为一个组

How to attribute values to a group according to dataset information

我需要一个虚拟变量来识别 children 具有高智商的母亲,而这个问题不是直接问的。

我对R不是很熟悉,所以我的问题可能很简单。这是使用的数据:

data <- data.frame(family=c(1,1,1,2,2,2,3,3,3,3),
                  position=c("mother","son","father",
                         "mother","son","father",
                         "mother","son","son","son"),
              sex=c(0,1,1,0,0,1,0,1,0,0),
              highiq=c(0,0,1,1,1,1,0,0,1,0))

其中 family 表示哪些观察值构成了一个家庭组,positions 表示个人在家庭中的位置,sex 是性别,highiq 当观察结果显示高智商时等于 1。我已经设法通过以下方式识别出高智商的儿子:

dat2 <- dat%>%
  mutate(high.son = position=="son"& highiq==1)

但我不能更进一步。我想象一个可能的解决方案是为母亲创建一个虚拟变量(is.mother),另一个虚拟变量将 1 归因于家庭中至少有一个儿子具有高智商的每个成员(IQ.family )-如果家里没有高智商的儿子,那么他们都得到0-,然后将is.mother虚拟变量乘以这个新的IQ.family变量,对于我们应该只得到高智商儿子的母亲。

我在使用此策略时遇到的一个问题是我无法生成变​​量 IQ.family,因为我找不到将值归因于根据数据集的其他信息分组。

any(highiq[position == 'son'] == 1)TRUE 如果 highIQ == 1 任何儿子。因此,如果 position == 'mother',则需要将该值分配给新变量,否则分配 0。

library(dplyr)
data %>% 
  group_by(family) %>% 
  mutate(mother_highIQ_son = 
           ifelse(position == 'mother', any(highiq[position == 'son'] == 1), 0))

# # A tibble: 10 x 5
# # Groups:   family [3]
#    family position   sex highiq mother_highIQ_son
#     <dbl> <chr>    <dbl>  <dbl>             <dbl>
#  1      1 mother       0      0                 0
#  2      1 son          1      0                 0
#  3      1 father       1      1                 0
#  4      2 mother       0      1                 1
#  5      2 son          0      1                 0
#  6      2 father       1      1                 0
#  7      3 mother       0      0                 1
#  8      3 son          1      0                 0
#  9      3 son          0      1                 0
# 10      3 son          0      0                 0

== 1 不是绝对必要的,但如果不包含它,您会收到有关类型强制的警告。