【发布时间】:2021-09-20 07:49:02
【问题描述】:
我有一个类似于以下内容的数据框:
| ID | X | Y | A_1_l | A_2_m | B_1_n | B_2_l | C_1_m | C_2_n | C_3_l |
|---|---|---|---|---|---|---|---|---|---|
| w | X | Y | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| x | X | Y | 0 | 0 | 3 | 0 | 0 | 0 | 0 |
| y | X | Y | 0 | 1 | 0 | 4 | 0 | 1 | 0 |
| z | X | Y | 3 | 4 | 5 | 6 | 2 | 1 | 5 |
第一个字母表示样本,数字表示重复,第二个字母表示批次。我正在尝试计算每个 ID 至少有一个值 > 0 的样本数,并将这些数字存储在一个列表中。
这是我可以附加到现有数据框的列表所需的结果:
0,1,3,3
对于之前的分析,我使用strsplit 来计算每批次的样本总数。
colsList <- colnames(df)
cols <- grep("_", colsList, value=TRUE)
splitList <- strsplit(cols, "_\\d_")
stats <-data.frame(t(as.data.frame.list(splitList)))
rownames(stats)<-NULL
names(stats)<-c("Sample", "Batch")
perSample <- aggregate(Sample ~ Batch, stats,
function(x) length(unique(x))) # number of strains
我能够使用rowSums(df[sapply(df, is.numeric)] > 0) 找到值 > 0 的总列数,但我似乎无法弄清楚如何将两者结合起来以找到样本总数 > 0
【问题讨论】:
标签: r dataframe strsplit rowsum