如何从R四列数据框创建Regulator分组的指定嵌套列表?
嵌套列表生成问题解决方案
需求背景
需要从包含Regulator、TG、MOA、likelihood四列(共661,599行)的数据框创建嵌套列表,预期结构:
- 最外层列表按
Regulator列分组 - 每个分组下嵌套两个子列表:
tfmode:包含TG和MOA列的数据likelihood:对应likelihood列的数据
已尝试的代码
# 尝试1 first_list <- split(df, df$Regulator) second_list <- lapply(first_list, function(x) x[!names(x) %in% c("Regulator")])
# 尝试2 another_list <- list(TFMODE = list(df$`TG`, df$MOA), likelihood = df$likelihood)
问题解答
1. 如何正确访问分组后列表中各Regulator对应的列?
你之前的访问语法存在错误,正确的访问方式如下:
- 针对改进前的
second_list(每个元素是去掉Regulator列的数据框):- 访问名为
ABCA1的Regulator对应的TG列:second_list[["ABCA1"]]$TG或second_list[["ABCA1"]][["TG"]] - 访问第一个分组的
MOA列:second_list[[1]]$MOA(注意用[[1]]而非[1],[1]返回的是子列表,[[1]]才是对应的数据框)
- 访问名为
- 针对最终生成的嵌套列表(下文代码的
final_list):- 访问
ABCA1的TG列:final_list[["ABCA1"]]$tfmode$TG
- 访问
2. 如何将分组后的数据转换为指定结构的嵌套列表?
基于你的第一种尝试,只需修改lapply的处理逻辑,对每个分组的数据框生成符合要求的子结构即可:
# 最终实现代码 first_list <- split(df, df$Regulator) final_list <- lapply(first_list, function(group_df) { list( # tfmode子列表:包含TG和MOA的键值对 tfmode = list( TG = group_df$TG, MOA = group_df$MOA ), # likelihood子列表:对应列的向量 likelihood = group_df$likelihood ) })
如果你的R包要求tfmode是两列的数据框而非嵌套列表,可将tfmode部分改为:
tfmode = group_df[, c("TG", "MOA")]
内容的提问来源于stack exchange,提问作者Hanjiong
相关产品推荐
相关产品推荐

