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

时间:2019-02-01 14:36:31

标签: r dummy-variable

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

我对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))

家庭告诉哪些观察值构成一个家庭组,位置通知个人在家庭中的位置,性别它是性别和当观察结果显示高智商时,highiq 等于1。我已经通过以下方法设法找到智商高的儿子:

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

但是我不能再走了。我想一个可能的解决方案是为母亲(即母亲)创建一个虚拟变量,并为每个至少有一个儿子具有较高智商的家庭成员(IQ.family)创建另一个将1赋予属性的虚拟变量。家庭没有智商高的儿子,那么他们全都为0,然后将 is.mother 虚拟变量乘以这个新的 IQ.family 变量,应该只让智商高的母亲成为儿子。

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

1 个答案:

答案 0 :(得分:0)

如果任何儿子有any(highiq[position == 'son'] == 1),则

TRUEhighIQ == 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不是严格必需的,但是如果不包含UIBezierPath *maskPath1 = [UIBezierPath bezierPathWithRoundedRect:CGRectInset(view.bounds, 0.5, 0.5) byRoundingCorners:corners cornerRadii:CGSizeMake(6.0, 6.0)]; CAShapeLayer *maskLayer1 = [[CAShapeLayer alloc] init]; maskLayer1.frame = view.bounds; maskLayer1.path = maskPath1.CGPath; maskLayer1.strokeColor = view.layer.borderColor; maskLayer1.lineJoin = kCALineJoinRound; view.layer.mask = maskLayer1; view.layer.masksToBounds = YES; [view setNeedsDisplay]; ,则会收到有关强制类型的警告。