r - 如何使用唯一 ID 使用循环代码构建子集
问题描述
我尝试在 data.frame 中编写带有 ID 的循环代码df
。我现在所做的是构建另一个列表 dm,其中包含来自以下位置的唯一 ID df$ID
:
dm<-df %>% select(ID) %>% unique()
for (i in 1:length( dm$ID)){
df_new<-df %>% filter(ID %in% dm$ID[i])
...
当前的代码可以做我需要的。但是我想知道是否有另一种方法可以在不构建 dm 的情况下做到这一点?我想按 df 中的每个 ID 构建子集。有什么建议吗?
解决方案
而不是循环遍历unique
'ID'和subset
ing,更快的选择是根据'ID'的值将data.framesplit
拆分data.frame
为list
unique
df_list <- split(df, df$ID)
从这里,我们可以使用lapply
或for
循环
pdf(paste0(out_dir, output_date,'.pdf'))
for(i in seq_along(df_list)) {
ggplot(data = df_list[[i]]) +
...
}
dev.off()
或与lapply
pdf(paste0(out_dir, output_date,'.pdf'))
lapply(df_list, function(dat)
ggplot(data = dat) +
...
)
dev.off()
关于unique
“ID”对象的创建,更好的选择是
for(un in unique(df$ID)) {
df_new <- df %>%
filter(ID == un)
ggplot(df_new) +
...
}
推荐阅读
- mysql - 比 find_in_set 更好的性能选项
- python - 用python画一个时钟
- android - Android Studio 设计视图未正确显示
- android - 为什么 Mockito 的 when()... thenReturn() 不能与其他类的字符串常量一起使用
- wordpress - Google ReCaptcha 隐藏标志
- javascript - 从另一个组件中更改一个组件中的属性值
- rust - 可变 ref 在闭包内变得不可变
- amazon-web-services - 如何控制 AWS Secret Manager 的访问
- excel - VBA调整复制的数据
- graphql - 测试运行完成后一秒钟,Jest 没有退出。--detectOpenHandles