R:使用数据框列名作为矢量名称

时间:2014-01-29 19:38:14

标签: r

我是一个相当新的R用户(MATLAB转换器),我正在尝试使用我给出数据集的列名命名数据集中的变量。

假设我有一个名为Z的数据框,其中有三列,我的名字如下所示。

Header <- c("Date", "Time", "Data")
colnames(Z) <- Header

有没有一种简单的方法可以将这些列名转换为矢量名,这样当我在命令行中键入“Data”时,会出现第3列中的值(因此我可以在脚本中轻松调用这些名称)? / p>

提前多多谢谢!

3 个答案:

答案 0 :(得分:2)

以下是使用数据附加和分离功能的示例。我相信这对于交互式使用是可以的,但它不是编程的最佳实践。可能,根本不可以使用它,我相信我从未使用过它!

Z <- data.frame(matrix(rpois(9, 80), ncol = 3, nrow = 9))
head(Z)
> head(Z)
X1  X2  X3
1  69  69  69
2  80  80  80
3  69  69  69
4 103 103 103
5  65  65  65
6  81  81  81

# Use different names for each column!

Header <- c("Date_1", "Time", "Data_2")
colnames(Z) <- Header

head(Z)
 Date_1 Time Data_2
1   69   69   69
2   80   80   80
3   69   69   69
4  103  103  103
5   65   65   65
6   81   81   81


attach(Z)

Date_1
[1]  69  80  69 103  65  81  84  70  93

Time
[1]  69  80  69 103  65  81  84  70  93

detach(Z)

# Do not forget to detach! 
Time
Error: objeto 'Time' no encontrado

也许另一种选择是使用:

with(Z, Time)
# [1] 91 81 81 87 82 72 81 74 85

with(Z, quantile(Time))
#  0%  25%  50%  75% 100% 
#  72   81   81   85   91 

或只是对每个变量进行分组。

# Subsetting keeping attributes
Z[2]
Z["Time"]

attributes(Z["Time"])
# $names
# [1] "Time"

# $class
# [1] "data.frame"

# $row.names
# [1] 1 2 3 4 5 6 7 8 9

# Subsetting droping attributes
Z$Time
Z[["Time"]]

attributes(Z[["Time"]])
# NULL

答案 1 :(得分:0)

通常使用'$'运算符从数据框中访问列。在您的情况下,您想要使用

Z$Data

获取'数据'向量。 R有一个名为'attach()'的函数,它实际上将一个数据框指定为你的参考框架,这样你在命令行中输入的与数据框中的列头相匹配的任何变量都将返回该向量,ala

attach(Z)
Data

会返回'数据'向量。但是,建议不要这样做,因为跟踪所连接的框架并不总是很容易,并且可能会产生意想不到的后果。如果您想为每个列创建独立于数据框但名称与列名相同的单独数据向量,您可以这样做:

Header <- c("Date", "Time", "Data")
for (i in 1:length(Header)){
  assign(Header[i], Z[ ,i])
  }

虽然我再次使用'$'符号运算符来访问数据框中的列。比使用相似名称的两个数据副本更好。

答案 2 :(得分:0)

您可以使用$运算符按名称调用列,也可以在示例中按数据框中的位置调用列:

z$Data

z[3]

z[,3]

都是一样的。

查看此参考卡:http://cran.r-project.org/doc/contrib/Short-refcard.pdf。当我刚开始使用R时,我无法告诉你它有多少次帮助了我。