【问题标题】:R: How to subset columns based on values of the first row?R:如何根据第一行的值对列进行子集化?
【发布时间】:2015-10-08 18:50:26
【问题描述】:

我想根据第一行中的某个值制作列的子集。举个例子:

df <- data.frame( region = c("A", sample(1:5,3)),
                  region = c("B", sample(1:5,3)),
                  region = c("C", sample(1:5,3)),
                  region = c("A", sample(1:5,3)) )

> df
  region region.1 region.2 region.3
1      A        B        C        A
2      5        5        3        3
3      2        1        5        4
4      4        2        1        5

我想对第一行中显示A 的所有列进行子集化。我不能使用索引号来执行此操作,因为我的数据集中有 3000 多个列,并且列名的名称也很重要,这就是为什么我使用第一行作为第二个标题的原因。此示例的结果应返回:

  region  region.3
1      A         A
2      5         3
3      2         4
4      4         5 

我怎样才能避免同名(region.1、region.2...)的 colnames 中的自动计数?感谢您的想法。

【问题讨论】:

  • df[unlist(df[1, ]) == "A"] 可能是您想要的,但这是设置包含混合字符和数字的数据的不好方法。
  • 感谢您的注意,但我只需要此行用于这个开始的子集。在下一步中,我删除第一行,我将只使用 colnames。

标签: r subset


【解决方案1】:

你可以像在

中那样使用索引
> df[, df[1, ] == "A"]
  region region.3
1      A        A
2      3        1
3      2        5
4      1        4

尝试使用check.names=FALSE 回答第二个问题

> data.frame( region = c("A", sample(1:5,3)),
+             region = c("B", sample(1:5,3)),
+             region = c("C", sample(1:5,3)),
+             region = c("A", sample(1:5,3)), check.names=FALSE )
  region region region region
1      A      B      C      A
2      5      5      4      2
3      2      1      5      5
4      4      2      2      4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    相关资源
    最近更新 更多