如何根据数据集信息将值归为一个组
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
不是绝对必要的,但如果不包含它,您会收到有关类型强制的警告。
我需要一个虚拟变量来识别 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
不是绝对必要的,但如果不包含它,您会收到有关类型强制的警告。