如何使用top_n进行条件提取
How to use top_n for conditional extraction
所以我的 df 中有一个包含“是”或“否”的列(类别),为了创建一个更平衡的样本,我想 select 包含前 500 个案例的行来自我的数据集的“是”和前 500 个“否”案例。
我试过这个代码:
top_n(df,500, category=="Yes")
但是这 select 所有情况都是肯定的,而不是只有前 500 个
我也试过这个但是这给了我一个错误虽然我确定它没有意义
df %>% filter(top_n(500, category == "Yes") & top_n(500, category=="No"))
我需要一些正确方向的帮助
我可能会为此使用 head
,并直接在数据框上进行过滤
df1 <- head(df[df$category == "Yes",], 500)
df2 <- head(df[df$category == "No",], 500)
# to combine
out <- rbind(df1, df2)
我猜 top_n
做了类似的事情。我希望 dplyr
有更好的方法,但这应该有效:)
如果您想随机 select yes/no 答案,您可以使用此代码:
#// generate toy data
df <- data.frame(YN = rep(c("yes", "no"),10), val = runif(20, 1, 100))
head(df)
#> YN val
#> 1 yes 26.00628
#> 2 no 98.34237
#> 3 yes 68.05788
#> 4 no 21.87011
#> 5 yes 33.92545
#> 6 no 68.74417
#// set random seed for reproducibility
set.seed(123)
#// randomly sample 5 'yes' answers
yes <- df[sample(which(df$YN == "yes"), 5),]
#// randomly sample 5 'no' answers
no <- df[sample(which(df$YN == "no"), 5),]
#// create new dataframe with sampled answers
df_sub <- rbind(yes, no)
df_sub
#> YN val
#> 5 yes 33.925453
#> 19 yes 53.548253
#> 3 yes 68.057878
#> 15 yes 51.029700
#> 11 yes 91.768337
#> 10 no 11.923457
#> 8 no 8.467184
#> 12 no 63.233610
#> 16 no 93.375332
#> 2 no 98.342369
由 reprex package (v0.3.0)
创建于 2021-01-07
所以我的 df 中有一个包含“是”或“否”的列(类别),为了创建一个更平衡的样本,我想 select 包含前 500 个案例的行来自我的数据集的“是”和前 500 个“否”案例。
我试过这个代码:
top_n(df,500, category=="Yes")
但是这 select 所有情况都是肯定的,而不是只有前 500 个 我也试过这个但是这给了我一个错误虽然我确定它没有意义
df %>% filter(top_n(500, category == "Yes") & top_n(500, category=="No"))
我需要一些正确方向的帮助
我可能会为此使用 head
,并直接在数据框上进行过滤
df1 <- head(df[df$category == "Yes",], 500)
df2 <- head(df[df$category == "No",], 500)
# to combine
out <- rbind(df1, df2)
我猜 top_n
做了类似的事情。我希望 dplyr
有更好的方法,但这应该有效:)
如果您想随机 select yes/no 答案,您可以使用此代码:
#// generate toy data
df <- data.frame(YN = rep(c("yes", "no"),10), val = runif(20, 1, 100))
head(df)
#> YN val
#> 1 yes 26.00628
#> 2 no 98.34237
#> 3 yes 68.05788
#> 4 no 21.87011
#> 5 yes 33.92545
#> 6 no 68.74417
#// set random seed for reproducibility
set.seed(123)
#// randomly sample 5 'yes' answers
yes <- df[sample(which(df$YN == "yes"), 5),]
#// randomly sample 5 'no' answers
no <- df[sample(which(df$YN == "no"), 5),]
#// create new dataframe with sampled answers
df_sub <- rbind(yes, no)
df_sub
#> YN val
#> 5 yes 33.925453
#> 19 yes 53.548253
#> 3 yes 68.057878
#> 15 yes 51.029700
#> 11 yes 91.768337
#> 10 no 11.923457
#> 8 no 8.467184
#> 12 no 63.233610
#> 16 no 93.375332
#> 2 no 98.342369
由 reprex package (v0.3.0)
创建于 2021-01-07