如何提取数据框的所有列,这些列在 R 的第一行中包含特定值

How to extract all columns of a data frame which contain a specific value in the first row in R

我有一个包含多个实验测量值的数据框。我想将数据框分成多个数据框,每个数据框包含一个实验的测量值。

g1、g2 等。是我测量的不同分子,我想将此信息保留为行名称。

df1

a1 a2 a3 a4 a5 a6
g1 0 5 7 2 1 9
g2 5 6 1 3 7 1

然后我有另一个数据框,其中包含有关哪个实验属于哪个测量的信息。

df2

MeasurmentNr ExperimentNr
a1 e1
a2 e1
a3 e2
a4 e2
a5 e3
a6 e3

如何将一个数据框拆分成多个格式相同的数据框?

我尝试通过匹配值来解决这个问题,但没有成功。

exp <- split(dataframe,factor(c("e1","e2","e3"), levels=c("e1","e2","e3")))

我最终做的不是一个优雅的解决方案,它也有很多步骤,但我相信它可以一步完成。我不擅长 R,所以如果有人能解释为一个更优雅的解决方案,我会很高兴。

这是我的解决方案。我首先重塑了 df2,然后将其与 df1 合并,最后将列拆分为一个新列表,其中每个实验都是一个单独的 df。

test <- melt(as.data.frame(df2), id.vars = "MeasurmentNr")
colnames(test) <- test[1,]
test <- test[-1, ]
newnew <- rbind(test,df1)

new_df <- split.default(newnew, sub('\+', '', newnew[1,]))

它为每个实验创建一个单独的数据框。

text="a1 a2 a3 a4 a5 a6
g1 0 5 7 2 1 9
g2 5 6 1 3 7 1"
df1=read.table(text=text, header=TRUE, stringsAsFactors = FALSE, row.names=1)
text="MeasurmentNr ExperimentNr
a1 e1
a2 e1
a3 e2
a4 e2
a5 e3
a6 e3"
df2=read.table(text=text, header=TRUE, stringsAsFactors = FALSE)

library(dplyr)
lapply(unique(df2$ExperimentNr), function(x) {
  filter(df2, ExperimentNr==x) %>% .$MeasurmentNr %>% df1[,.]
})

[[1]]
   a1 a2
g1  0  5
g2  5  6

[[2]]
   a3 a4
g1  7  2
g2  1  3

[[3]]
   a5 a6
g1  1  9
g2  7  1