我能够命名数据帧的特定列,如:
> 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]
?
答案 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
这可能不是一个好主意。