Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 按名称取消选择列_R_Indexing_Dataframe_Slice - Fatal编程技术网

R 按名称取消选择列

R 按名称取消选择列,r,indexing,dataframe,slice,R,Indexing,Dataframe,Slice,是否有一种方法可以选择数据框中除具有特定名称的列之外的所有列 除了使用列名而不是索引之外,它将类似于df[,-1]。您可以使用向量子集进行此操作。首先,创建一个虚拟数据集: R> dd = data.frame(A = 1:3, B = 1:3, C=1:3, D=1:3) 然后使用运算符以反转选择: R> dd[ ,!(colnames(dd) == "A")] B C D 1 1 1 1 2 2 2 2 3 3 3 3 或者,您可以: 略短的版本(由@Tomas提供)

是否有一种方法可以选择数据框中除具有特定名称的列之外的所有列


除了使用列名而不是索引之外,它将类似于
df[,-1]

您可以使用向量子集进行此操作。首先,创建一个虚拟数据集:

R> dd = data.frame(A = 1:3, B = 1:3, C=1:3, D=1:3)
然后使用
运算符以反转选择:

R> dd[ ,!(colnames(dd) == "A")]

  B C D
1 1 1 1
2 2 2 2
3 3 3 3
或者,您可以:

  • 略短的版本(由@Tomas提供):

  • 处理多个栏目(由@Tyler提供)


可以使用
which()
函数来标识要删除的列

dd <- data.frame(A = 1:5, B = 1:5, C=1:5)

dd[, -which(names(dd) == "A")]
但是,如果没有名为“A”的列,您将得到一个包含0列和
nrow(dd)
行的数据帧。因此,最好检查是否存在名为“a”的列


subset
函数已经允许使用这种语法,如帮助页面上的示例所示:

subset(airquality, Day == 1, select = -Temp)

要取消选择多个列,可以使用dplyr包。例如:

dd = data.frame(A = 1:3, B = 1:3, C=1:3, D=1:3)

library(dplyr)
newdd <- select(dd, -A,-C)
dd=data.frame(A=1:3,B=1:3,C=1:3,D=1:3)
图书馆(dplyr)

newdd删除A和C

base
解决方案 我想提供data.frame的替代方案。它提供了更好的选择可能性。
dd[, which(names(dd) != "A")]
if(any(names(dd) == "A")) {
  dd[, which(names(dd) != "A")]
}
subset(airquality, Day == 1, select = -Temp)
dd = data.frame(A = 1:3, B = 1:3, C=1:3, D=1:3)

library(dplyr)
newdd <- select(dd, -A,-C)
df <- data.frame(A = 1:3, B = 1:3, C=1:3, D=1:3)

df[,c("A","C")]<-NULL
dt <- data.table(A = 1:3, B = 1:3, C=1:3, D=1:3)

#    A B C D
# 1: 1 1 1 1
# 2: 2 2 2 2
# 3: 3 3 3 3

dt[,c("A","C"):=NULL]

#   B D
#1: 1 1
#2: 2 2
#3: 3 3