R 访问数据帧中的列名
我有一个列名为z_1,z_2,直到z_200的数据帧。在下面的示例中,为了便于表示,我只显示z_1R 访问数据帧中的列名,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
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 ) ) )