如何提取数据框的所有列,这些列在 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
我有一个包含多个实验测量值的数据框。我想将数据框分成多个数据框,每个数据框包含一个实验的测量值。
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