如何在R语言for循环中通过对象动态命名数据框?
如何在R循环中动态创建对应名称的数据框
你需要将???替换为assign(lab_name, value = )的结构,具体修改后的代码如下:
adlb <- data.frame(subjid = c(1:20), aval = c(100:119)) adlb$paramcd <- ifelse(adlb$subjid <= 10, "ALT", "AST") lab_list <- unique(dplyr::filter(adlb, !is.na(aval))$paramcd) for (i in 1:length(lab_list)) { lab_name <- unlist(lab_list)[[i]] print(lab_name) assign(lab_name, adlb %>% dplyr::filter(paramcd == lab_name) %>% tidyr::drop_na(aval) ) }
关键说明:
assign()函数专门用于动态创建命名对象:第一个参数传入要创建的数据框名称(这里lab_name是字符串类型的"ALT"/"AST",正好符合要求),第二个参数传入筛选后的数据框内容。- 注意使用
drop_na()需要提前加载tidyr包,如果你不想额外加载包,可以把这一步替换为dplyr::filter(!is.na(aval)),效果完全一致。
补充建议:
虽然单独创建数据框方便直接查看和调试,但如果后续需要批量操作这些实验室数据,将它们存储在一个命名列表里会更便于管理,示例代码如下:
lab_dfs <- list() for (i in 1:length(lab_list)) { lab_name <- unlist(lab_list)[[i]] lab_dfs[[lab_name]] <- adlb %>% dplyr::filter(paramcd == lab_name) %>% tidyr::drop_na(aval) } # 调用指定数据框时使用 lab_dfs[["ALT"]] 即可
内容的提问来源于stack exchange,提问作者user20928915
相关产品推荐
相关产品推荐

