在 R 中:在 data.frame 中查找每个因素低于特定阈值的值
In R: Find values in a data.frame that are below a certain threshold for each factor
假设我有以下 data.frame:
df = data.frame(groups =c("A","A","A","B","B","B","C","C","D","D","D","D","D"),
values =c(1,1,5,3,2,1,7,7,9,8,7,6,5))
和另一个 data.frame:
df_t = data.frame(groups=c("A","B","C","D"),
threshold=c(2,5,3,9))
现在我想向 df
添加另一列,指示值是否低于分组阈值 (TRUE) 或 (FALSE)。在这种情况下:
TRUE,TRUE,FALSE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE,TRUE,TRUE,TRUE,TRUE
我知道这可以通过 for 循环轻松完成。但是,我认为必须有一种更优雅的方法来实现这一点。我也更喜欢基本的 R 解决方案而不是 dplyr 或 data.table.
考虑按 'groups' 加入数据集并创建列
library(dplyr)
df %>%
left_join(df_t) %>%
mutate(flag = values < threshold, threshold = NULL)
或者在base R
中使用match
得到相应的索引(或者merge
)
df$flag <- with(df, values < df_t$threshold[match(groups, df_t$groups)])
df$flag
#[1] TRUE TRUE FALSE TRUE TRUE TRUE FALSE FALSE FALSE TRUE TRUE TRUE TRUE
假设我有以下 data.frame:
df = data.frame(groups =c("A","A","A","B","B","B","C","C","D","D","D","D","D"),
values =c(1,1,5,3,2,1,7,7,9,8,7,6,5))
和另一个 data.frame:
df_t = data.frame(groups=c("A","B","C","D"),
threshold=c(2,5,3,9))
现在我想向 df
添加另一列,指示值是否低于分组阈值 (TRUE) 或 (FALSE)。在这种情况下:
TRUE,TRUE,FALSE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE,TRUE,TRUE,TRUE,TRUE
我知道这可以通过 for 循环轻松完成。但是,我认为必须有一种更优雅的方法来实现这一点。我也更喜欢基本的 R 解决方案而不是 dplyr 或 data.table.
考虑按 'groups' 加入数据集并创建列
library(dplyr)
df %>%
left_join(df_t) %>%
mutate(flag = values < threshold, threshold = NULL)
或者在base R
中使用match
得到相应的索引(或者merge
)
df$flag <- with(df, values < df_t$threshold[match(groups, df_t$groups)])
df$flag
#[1] TRUE TRUE FALSE TRUE TRUE TRUE FALSE FALSE FALSE TRUE TRUE TRUE TRUE