使用单个名称处理多列data.frame

时间:2013-08-06 19:35:03

标签: r dataframe

我能够命名数据帧的特定列,如:

> 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]

3 个答案:

答案 0 :(得分:3)

使用正则表达式:

x[,grep("^X$",names(x))]

答案 1 :(得分:3)

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

你可以要求所有这些,但是你必须做一些匹配。一种选择是使用grep,正如@thomas所建议的那样。您可以使用%in%

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

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

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

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

names(x) <- make.names(names(x))

答案 2 :(得分: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

这可能不是一个好主意。