循环数据帧生产
Loop DataFrame Production
我希望将一个大数据框 (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)
理想情况下,在自动化过程中,class 类型也将如上面的代码所示进行转换。
一些示例数据:
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
在完全可重现的示例中,您可以使用:
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
放在一个列表中,但每个组件都不容易访问。
Split 很有用,但我发现很难对埋在 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)}
然后在最后将分析物名称分配给子集数据框。
我希望将一个大数据框 (mix1a.df
) 分解成许多较小的数据框(例如 drugA.df
、drugB.df
、drugC.df
等)一种自动(循环)方式。我如何让 R 在初始数据帧 mix1a.df
?
例如,现在我通过以下方式提取我想要的单个数据框的信息:
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)
理想情况下,在自动化过程中,class 类型也将如上面的代码所示进行转换。
一些示例数据:
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
在完全可重现的示例中,您可以使用:
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
放在一个列表中,但每个组件都不容易访问。
Split 很有用,但我发现很难对埋在 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)}
然后在最后将分析物名称分配给子集数据框。