【问题标题】:How to attribute values to a group according to dataset information如何根据数据集信息将值归因于组
【发布时间】:2019-02-01 14:36:30
【问题描述】:

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

我对 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,因为我找不到根据数据集的其他信息将值归因于组的方法.

【问题讨论】:

    标签: r dummy-variable


    【解决方案1】:

    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 不是绝对必要的,但如果不包含它,您会收到关于类型强制的警告。

    【讨论】:

    • 第 7 次观察应该也有 1,你知道为什么没有吗?
    • 糟糕,没有仔细查看数据,所以没有考虑 > 1 个儿子。现在应该可以工作了,我已经添加了any
    猜你喜欢
    • 2016-10-10
    • 2017-08-13
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    相关资源
    最近更新 更多