我的数据框的列名为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)中的错误:一元运算符的无效参数”
感谢您的帮助
答案 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 ) ) )