R 访问数据帧中的列名

R 访问数据帧中的列名,r,dataframe,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)) df尝试: 代码不工作的原因是-c(tmp),其中tmp是一个字符,计算结果为零。您可以使用这种仅使用数值排除的方式 或者,这也会起作用: subset(df, se

我有一个列名为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))
df尝试:

代码不工作的原因是
-c(tmp)
,其中
tmp
是一个字符,计算结果为零。您可以使用这种仅使用数值排除的方式

或者,这也会起作用:

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

因为
它返回一个数字。

如果您想使用子集并包含或排除大量类似名称的列,我通常会考虑使用
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

另请参见此问题的答案:
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
subset(df, select= c("x", grep("^z", names(df), value=TRUE ) ) )