我希望将大型数据框(mix1a.df
)细分为许多较小的数据框(例如。drugA.df
,drugB.df
,drugC.df
等) (循环)时尚。如何让R自动为初始数据框mix1a.df
内找到的每种药物(列表中的n种药物= n个数据帧)创建子集数据框?
例如,现在我以下列方式提取单个数据框所需的信息:
alprazolam.df<-subset(mix1a.df, mix1a.df$Component.name.x == "Alprazolam",
select=c("Sample.Name", "Component.name.x", "TCAmount", "Ratio"))
alprazolam.df$Sample.Name<-(as.character)(alprazolam.df$Sample.Name)
alprazolam.df$Ratio<-(as.numeric)(alprazolam.df$Ratio)
alprazolam.df$Sample.Name.Level <- substr(alprazolam.df$Sample.Name, 1,2)
alprazolam.df$Sample.Name.Level<-(as.factor)(alprazolam.df$Sample.Name.Level)
理想情况下,在自动化过程中,类型也将如上面的代码所示进行转换。
对于某些示例数据:
Sample.Name Component.name TCAmount Ratio
1A-S0 Alprazolam 0.0 0.05
1A-S1 Alprazolam 1.5 0.07
1A-S2 Alprazolam 3.1 0.08
1A-S3 Alprazolam 6.25 0.10
2A-S0 Alprazolam 0.0 0.06
2A-S1 Alprazolam 1.5 0.08
2A-S2 Alprazolam 3.1 0.09
2A-S3 Alprazolam 6.25 0.10
1B-S0 Alprazolam 0.0 0.05
1B-S1 Alprazolam 1.5 0.08
1B-S2 Alprazolam 3.1 0.10
1B-S3 Alprazolam 6.25 0.11
1A-S0 Codeine 0.0 0.10
1A-S1 Codeine 1.5 0.30
1A-S2 Codeine 3.1 0.41
1A-S3 Codeine 6.25 0.62
2A-S0 Codeine 0.0 0.09
2A-S1 Codeine 1.5 0.29
2A-S2 Codeine 3.1 0.40
2A-S3 Codeine 6.25 0.62
1B-S0 Codeine 0.0 0.09
1B-S1 Codeine 1.5 0.28
1B-S2 Codeine 3.1 0.41
1B-S3 Codeine 6.25 0.61
答案 0 :(得分:1)
在完全可重现的示例中,您可以使用:
component <- c("A", "B", "C")
value <- c(1, 2, 3)
test <- data.frame(component, value)
dataframe_list <- split(test, component)
然后,您可以使用(例如)dataframe_list$A
访问不同的组件。或者,也可以手动使用:
dataframe_list <- list()
for(comp in test$component){
dataframe_list[[length(dataframe_list)+ 1]] <- test[which(test$component == comp),]
}
将所有不同的子data.frames
放入列表中,但每个组件无法轻松访问。
答案 1 :(得分:0)
拆分很有用但我发现很难对dataframe_list
之后隐藏的数据进行计算。我发现如果我创建一个名为Sample.Name.Level
的列来生成“AlprazolamA1”,例如使用:
df$Sample.Name.Level<-substr(df$Sample.Name, 1,2)
然后我可以使用:
进行for循环 analytes<-unique(as.factor(df$Component.name))
df.names<-unique(as.character(df$Component.name))
for (i in 1:nlevels(analytes)) {
loop.df<-subset(df, df$Component.name == analytes [i], loop.df$Sample.Name.Levelselect=c("Sample.Name.Level", "Component.name", "TCAmount", "Ratio"))
loop.df$Sample.Name.Level<-(as.character)(loop.df$Sample.Name.Level)
loop.df$Ratio<-(as.numeric)(loop.df$Ratio)
try(plot(loop.df$TCAmount, loop.df$Ratio))
try(abline(loop.df))
assign(df.names2[i], loop.df)}
然后,它还将分析物名称分配给子集化数据帧。