R 将数据帧转换为列表
我试图在R中从一个数据帧转换成一个列表结构(从技术上讲,我知道数据帧是一个列表)。我有一个数据框架,其中包含参考化学品及其机制和不同的目标。例如,雌激素是雌激素受体激动剂。我希望将数据框转换为列表,因为我已经厌倦了键入以下内容:R 将数据帧转换为列表,r,list,dataframe,apply,R,List,Dataframe,Apply,我试图在R中从一个数据帧转换成一个列表结构(从技术上讲,我知道数据帧是一个列表)。我有一个数据框架,其中包含参考化学品及其机制和不同的目标。例如,雌激素是雌激素受体激动剂。我希望将数据框转换为列表,因为我已经厌倦了键入以下内容: refchem$chemical_id[refchem$target=="AR" & refchem$mechanism=="Agonist"] 每次我需要查看特定参考化学品的清单时。我更希望通过以下方式获取化学品: refchem$AR$Agonist 尽
refchem$chemical_id[refchem$target=="AR" & refchem$mechanism=="Agonist"]
每次我需要查看特定参考化学品的清单时。我更希望通过以下方式获取化学品:
refchem$AR$Agonist
尽管我给出了一个简单的例子,但我正在寻找一个一般性的答案,因为并非所有的目标都有所有的机制
这很容易通过循环实现:
example <- data.frame(target=rep(c("t1","t2","t3"),each=20),
mechan=rep(c("m1","m2"),each=10,3),
chems=paste0("chem",1:60))
oneoption <- list()
for(target in unique(example$target)){
oneoption[[target]] <- list()
for(mech in unique(example$mechan)){
oneoption[[target]][[mech]] <- as.character(example$chems[ example$target==target & example$mechan==mech ])
}
}
示例使用拆分:
split(refchem, list(refchem$target, refchem$mechanism))
我们应该做到这一点
新的访问方式是refchem$AR.agnitor
您也可以使用plyr
功能:
library(plyr)
dlply(example, .(target, mechan))
如果需要,它还具有使用函数处理数据的附加优势(上面有一个隐式的标识)。如果您制作一个键控的data.table
- 您仍然将所有数据放在一个data.frame中(而不是许多数据的嵌套列表)李>
- 您可能会发现迭代这些子集更好;及
- 语法非常清晰:
要访问子集,请执行以下操作:
DT[.('AR','Agonist')]
要为每组做一些事情,结果中将rbind
ed放在一起:
DT[,{do stuff},by=key(DT)]
与aggregate()
类似,任何长度正确的向量列表都可以通过进入,而不仅仅是键
最后,DT
来自
require(data.table)
DT <- data.table(refchem,key=c('target','mechanism'))
require(data.table)
谢谢!这就是我一直在寻找的。有没有一种方法可以删除没有任何条目的因子,而不必在drop
参数中手动列出它们?因为drop
是合乎逻辑的,您可以只设置drop=TRUE
,而R
应该为您做。我一直推迟学习data.table包。可能是时候了。@dayne我也这么做了很长一段时间——但我知道这是我用R做出的最好的决定。我曾经有一个函数,它有150行代码,运行了5分钟,现在运行15秒,占用了25行代码。