【发布时间】:2019-11-25 15:10:34
【问题描述】:
我正在尝试更广泛地使用 dplyr,并且对使用列索引而不是列名的(按行)操作有疑问。在我的工作流程中,我有数据表,其中第一列是 char() 标识符,最后一列也是 char() 数据类型。第一个和最后一个之间的所有列都包含将用于操作的数值 - 在此示例中:按丰度排序并仅保留 5 个更丰富的行。
这是一个使用经典 R 的示例:
example_file = "~/path/my/data/example_table.tsv"
df = data.frame(fread(example_file, header=TRUE), check.names=FALSE)
df$sum = rowSums(df[,2:(ncol(df)-1)])
df = df[order(-df$sum),]
df = df[1:5,]
这是我的 df 的 dput 输出:
df <- structure(list(feature = 1111:1117, A = c(2L, 1L, 0L, 1L, 11L,
1L, 0L), B = c(1L, 0L, 1L, 2L, 1L, 1L, 10L), C = c(0L, 1L, 2L,
0L, 2L, 2L, 1L), D = c(1L, 3L, 3L, 3L, 1L, 3L, 3L), E = c(4L,
4L, 3L, 4L, 4L, 3L, 4L), F = c(1L, 0L, 0L, 1L, 1L, 1L, 2L), G = c(1L,
2L, 2L, 2L, 21L, 4L, 2L), H = c(6L, 7L, 4L, 7L, 7L, 7L, 1L),
taxonomy = c("Eukaryota;Centrohelida;H15-6", "Eukaryota;Excavata;Discoba;Discicristata;Euglenozoa;Diplonemea;Rhynchopus",
"undef", "Eukaryota;Excavata;Discoba;Discicristata;Euglenozoa;Euglenida;Heteronematina",
"Eukaryota;Excavata;Discoba;Discicristata;Euglenozoa;Euglenida;Heteronematina",
"Eukaryota;Excavata;Discoba;Discicristata;Euglenozoa;", "Eukaryota;SAR;Alveolata;Ciliophora;Intramacronucleata"
)), class = "data.frame", row.names = c(NA, -7L))
我的问题很简单:如何使用 dplyr 范式实现上述代码?我直觉地在寻找一种使用列索引来操作 df 的方法——就像我在上面的代码块中所做的那样——但没有找到任何令人满意的答案。
任何指导将不胜感激。
【问题讨论】: