1

我可以命名数据框的特定列,如下所示:

> x <- data.frame(t(1:3));
> names(x)[2] <- "X";
> x
 X1  X X3 
  1  2  3
> x$X
2

但是当我执行以下操作时:

> names(x)[-1] <- "X";
> x
 X1  X  X
  1  2  3

两列都正确命名为“X”,但我无法解决所有列:

> x$X 
[1] 2

是否有任何方法可以使用单个名称来寻址 data.frame 的多个列 - 并且没有硬编码寻址,如x[2:3]

4

3 回答 3

3

使用正则表达式:

x[,grep("^X$",names(x))]
于 2013-08-06T19:37:58.360 回答
3

没有“直接”的方式来获取同名的列。如果你在一个盒子里有两支绿色蜡笔,你说“给我绿色蜡笔”,怎么会有人知道该给哪支蜡笔?

您可以要求所有这些,但是您必须进行一些匹配。一种选择是grep按照@thomas 的建议使用。您可以使用%in%

x[, names(x) %in% "X"]

我喜欢使用%in%,因为它允许您使用选择向量,例如

x[, names(x) %in% c("X", "Y")]

但是,我也喜欢拥有唯一的列名;)

names(x) <- make.names(names(x))
于 2013-08-06T19:43:25.850 回答
2

可以将矩阵作为变量存储在数据框中。您必须通过将矩阵包装在内部来保护矩阵I(),否则data.frame构造函数会将其转换为多个变量。

m <- matrix(1:20, nrow=5)
df <- data.frame(x=letters[1:5], m=I(m))
df$m
     [,1] [,2] [,3] [,4]
[1,]    1    6   11   16
[2,]    2    7   12   17
[3,]    3    8   13   18
[4,]    4    9   14   19
[5,]    5   10   15   20

不过,这可能不是一个好主意。

于 2013-08-06T19:51:00.530 回答