如何有条件地删除R中具有相同值的观测值
我正在尝试使用年龄条件对数据帧进行子集划分。然而,我希望它是有条件的多重观察 数据框架有10个观察值,变量为“家庭id”、“家庭关系”、“年龄”“住户id”是唯一分配给每户的住户编号家庭重组是一个人在家庭中的地位1“表示此人是户主。”2“表示他/她是该家庭的配偶。”“年龄”是指人的年龄如何有条件地删除R中具有相同值的观测值,r,subset,R,Subset,我正在尝试使用年龄条件对数据帧进行子集划分。然而,我希望它是有条件的多重观察 数据框架有10个观察值,变量为“家庭id”、“家庭关系”、“年龄”“住户id”是唯一分配给每户的住户编号家庭重组是一个人在家庭中的地位1“表示此人是户主。”2“表示他/她是该家庭的配偶。”“年龄”是指人的年龄 Household_id Household_relation Age 1 2 1 27 2
Household_id Household_relation Age
1 2 1 27
2 2 2 34
3 4 1 22
4 4 2 23
5 7 2 21
6 7 1 29
7 9 1 33
8 9 2 34
9 11 1 31
10 11 2 29
因此,数据是由每户的夫妇组成的。
我想放弃那些都不是20多岁的夫妇。因此,如果其中一人是20多岁,他们会在家庭id 2留下之前留下。但是如果他们都不是20多岁,我想从数据中删除他们,例如,家庭id 9应该删除。
因此,子设定过程应以每次两次观察为条件
因为我的真实数据有超过10000个观察值,所以语法应该足够短,可以将所有数据子集。我尝试使用“for”循环来实现这一点,但不知道如何实现
如何在R中执行此过程
下面是我的可复制示例代码
Household_id <- c(2,2,4,4,7,7,9,9,11,11)
Household_relation <- c(1,2,1,2,2,1,1,2,1,2)
Age <- c(27,34,22,23,21,29,33,34,31,29)
data <- data.frame(Household_id, Household_relation, Age)
在dplyr中,我们可以使用过滤器来保持拥有任何20多岁成员的组
library(dplyr)
data %>%
group_by(Household_id) %>%
filter(any(Age >= 20 & Age < 30))
# Household_id Household_relation Age
# <dbl> <dbl> <dbl>
#1 2 1 27
#2 2 2 34
#3 4 1 22
#4 4 2 23
#5 7 2 21
#6 7 1 29
#7 11 1 31
#8 11 2 29
在dplyr中,我们可以使用过滤器来保持拥有任何20多岁成员的组
library(dplyr)
data %>%
group_by(Household_id) %>%
filter(any(Age >= 20 & Age < 30))
# Household_id Household_relation Age
# <dbl> <dbl> <dbl>
#1 2 1 27
#2 2 2 34
#3 4 1 22
#4 4 2 23
#5 7 2 21
#6 7 1 29
#7 11 1 31
#8 11 2 29
当然,您可以将其转换为data.table,如:
library(data.table)
as.data.table(data)[, .SD[any(Age >= 20 & Age < 30)], Household_id]
# Household_id Household_relation Age
# 1: 2 1 27
# 2: 2 2 34
# 3: 4 1 22
# 4: 4 2 23
# 5: 7 2 21
# 6: 7 1 29
# 7: 11 1 31
# 8: 11 2 29
当然,您可以将其转换为data.table,如:
library(data.table)
as.data.table(data)[, .SD[any(Age >= 20 & Age < 30)], Household_id]
# Household_id Household_relation Age
# 1: 2 1 27
# 2: 2 2 34
# 3: 4 1 22
# 4: 4 2 23
# 5: 7 2 21
# 6: 7 1 29
# 7: 11 1 31
# 8: 11 2 29
太棒了。为什么我没有想到按功能分组!比我快。我有x%group\u ByHousehouse\u id%>%filteranysubstrAge,1,1==2子集设置后,我可以使用“ungroup”命令取消数据分组并进行回归吗?或者在做回归之前我不需要解组吗?@DanielCho我不确定,但我认为如果你直接做回归,应该不会有任何区别。这太棒了。为什么我没有想到按功能分组!比我快。我有x%group\u ByHousehouse\u id%>%filteranysubstrAge,1,1==2子集设置后,我可以使用“ungroup”命令取消数据分组并进行回归吗?或者在进行回归之前我不需要解组吗?@DanielCho我不确定,但我认为如果你直接进行回归,应该不会有任何区别。这也很有效!我不习惯data.table语法,但它确实很好用。这也很好用!我不习惯data.table语法,但它确实工作得很好。