访问数据框中的列名称

时间:2012-05-11 10:32:23

标签: r dataframe

我的数据框的列名为z_1,z_2,最高为z_200。在以下示例中,为了便于表示,我只显示z_1

df <- data.frame(x=1:5, y=2:6, z_1=3:7, u=4:8) 
df
i=1
tmp <- paste("z",i,sep="_")
subset(df, select=-c(tmp))

以上代码将在循环i中用于访问需要从数据框中删除的某些元素

执行上面的代码时,我收到错误“-c(tmp)中的错误:一元运算符的无效参数”

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

尝试:

df[names(df)!=tmp]

您的代码无效的原因是-c(tmp),其中tmp是一个字符,评估为空。您可以使用这种仅使用数值排除的方式。

或者这也可以:

subset(df, select=-which(names(df)==tmp))

因为which会返回一个数字。

答案 1 :(得分:1)

我想使用子集并且包含大量具有相似名称的列来包含或排除,我通常会考虑使用grepl来构造与列名称匹配的逻辑向量(或者您可以使用它尽可能容易地构造数字向量)。否定结果将删除列

df <- data.frame(x=1:5, y=2:6, z_1=3:7, u=4:8) 
df
i=1
tmp <- paste("z",i,sep="_")
subset(df, select= !grepl("^z", names(df) ) )
  x y u
1 1 2 4
2 2 3 5
3 3 4 6
4 4 5 7
5 5 6 8

通过否定,您可以使用该模式删除(或不包括)所有以“z”开头的列。或者,您可以将grep value =TRUE与字符值结合使用:

subset(df, select= c("x", grep("^z", names(df), value=TRUE ) ) )