【发布时间】:2016-07-27 16:05:12
【问题描述】:
我想计算列范围的 rowMeans,但我不能给出列名(例如 c(C1,C3))或范围(例如 C1:C3)的硬编码值,因为名称和范围都是可变的。我的 df 看起来像:
> df
chr name age MGW.1 MGW.2 MGW.3 HEL.1 HEL.2 HEL.3
1 123 abc 12 10.00 19 18.00 12 13.00 -14
2 234 bvf 24 -13.29 13 -3.02 12 -0.12 24
3 376 bxc 17 -6.95 10 -18.00 15 4.00 -4
这只是一个示例,实际上我的列范围在 MGW.1 ... MGW.196 等。在这里,我不想给出确切的 colnames 或确切的范围,而是要传递 colnames 的首字母,并希望获得具有该首字母的所有列的平均值。比如:MGW=rowMeans(df[,MGW.*]), HEL=rowMeans(df[,HEL.*])
所以我的最终输出应该是这样的:
> df
chr name age MGW Hel
1 123 abc 12 10.00 19
2 234 bvf 24 13.29 13
3 376 bxc 17 -6.95 10
我知道这些值是不正确的,但这只是为了给你和想法。 其次,我想从除前 3 个值之外的整行中包含 NA 的数据框中删除所有这些行。
这是示例示例的 dput:
> dput(df)
structure(list(chr = c(123L, 234L, 376L), name = structure(1:3, .Label = c("abc",
"bvf", "bxc"), class = "factor"), age = c(12L, 24L, 17L), MGW.1 = c(10,
-13.29, -6.95), MGW.2 = c(19L, 13L, 10L), MGW.3 = c(18, -3.02,
-18), HEL.1 = c(12L, 12L, 15L), HEL.2 = c(13, -0.12, 4), HEL.3 = c(-14L,
24L, -4L)), .Names = c("chr", "name", "age", "MGW.1", "MGW.2",
"MGW.3", "HEL.1", "HEL.2", "HEL.3"), class = "data.frame", row.names = c(NA,
-3L))
【问题讨论】:
-
我昨天问了一个相关问题,答案可能对您有所帮助。这是链接stackoverflow.com/questions/38594808/…
-
@Warner 正如我在问题中提到的,我不能明确提及列名或索引,因为它们是可变的,有时会有 196 列我想要 rowMean 有时会有 198 或所以。
-
您可以使用“逻辑”位置向量对
df进行子集化,其中names(df)?startsWith"MGW"等。另外,请参阅?complete.cases以查找仅包含NA的行(在对除前三列之外的所有列进行子集之后)。 -
你能硬编码 colnames 前缀(
MGW.*,HEL.*)吗?还是您需要以编程方式重新组合它们?