如何使用每组的行数作为条件对数据框进行子集化
Posted
技术标签:
【中文标题】如何使用每组的行数作为条件对数据框进行子集化【英文标题】:How to subset a dataframe using the number of rows per group as a condition 【发布时间】:2022-01-09 18:15:21 【问题描述】:我进行了一项日记研究,为期 5 天,参与者必须回答 2 次。
我的标准是,人们必须在 5 天中至少回答 3 天。因此,在进行问卷调查的总共 10 次中,他们必须回答至少 6 次。 每次他们填写问卷时都必须输入个人代码,这就是为什么我可以看到谁回答了多少次。
我是这样写的:
Morning_Afternoon_PT_EN:是数据库的名称
respfreq <- calc.nomiss(Morning_Afternoon_PT_EN$day, tolower(Morning_Afternoon_PT_EN$code), data=Morning_Afternoon_PT_EN)
print(respfreq)
enter image description here
952345172 alju12 amou79 amou91 baab81
0 5 10 10 10 10
base85 beju58 cade61 caju21 chno45 crju09
10 10 10 10 5 7
faap52 fuau48 fude38 fuma07 huju03 leja26
10 8 3 10 8 10
leju40 lema32 leno81 liab14 liab20 liab50
10 9 8 9 10 9
liabr14 liag30 liag60 liap520 liau35 lide50
1 10 9 10 9 9
life10 life74 lija05 lija45 lija78 liju65
9 1 10 10 9 10
liju94 lima40 lima82 limf96 lioc46 lioc84
9 10 10 4 10 10
lise50 lise88 maab31 moag91 moap58 pode04
9 10 10 10 9 8
sade61 saja28 saja79 saoc06 sema72 sema83
9 10 10 9 10 10
tose37 vima32
9 9
length(respfreq)
[1] 56
所以,我看到“952345172”、“chno45”、“limf96”、“liabr14”、“life74”、“fude38”不符合要求,我想消除它们整个数据库。
我尝试使用子集,例如:
NewDataFrame<-subset(Morning_Afternoon_PT_EN, respfreq>6)
但是,我得到了答案:
NewDataFrame6)
错误:必须使用有效的下标向量对行进行子集化。 i 逻辑 下标必须与索引输入的大小相匹配。 x 输入有大小 485 但下标
r
的大小为 56。
我了解错误,但我不知道如何解决。
【问题讨论】:
请不要发布数据或代码的照片!如果您这样做,愿意帮助您的人将不得不输入所有文本。而是提供minimal reproducible example这里是a good overview on how to ask a good question 【参考方案1】:您应该在数据框中包含带有计数的列才能使用subset
x <- c("952345172", "alju12", "amou79", "amou91", "baab81", NA)
code <- rep(x, c(5, 10, 10, 20, 2, 7))
df <- data.frame(id = 1:length(code), code)
head(df)
## id code
## 1 1 952345172
## 2 2 952345172
## 3 3 952345172
## 4 4 952345172
## 5 5 952345172
## 6 6 alju12
library(dplyr)
df2 <- left_join(df, na.omit(df) |> count(code))
df2 <- subset(df2, n > 6)
head(df2)
## id code n
## 6 6 alju12 10
## 7 7 alju12 10
## 8 8 alju12 10
## 9 9 alju12 10
## 10 10 alju12 10
## 11 11 alju12 10
另一种选择是使用:
tabc <- table(df$code)
df3 <- df[df$code %in% names(tabc[tabc > 6 ]), ]
【讨论】:
以上是关于如何使用每组的行数作为条件对数据框进行子集化的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用左连接的情况下根据“OR”条件对数据框进行子集化? [复制]