R 如果列值等于列名,如何删除列
R How to delete a column if column values equal to the column name
我有一个包含一堆列的数据集,其中列值(该列的所有值)与该列名完全相同。我怎样才能删除该列。我无法一一删除列,因为有 700 多个变量。
谢谢!
这里有一个你如何做的例子:
data = data.frame(x1 = rep(1,10), x2 = seq(1,20,by = 2),
x3 = rep("x3",10), x4 = 1:10, x5 = rep("x5",10))
col_rm = which(sapply(1:ncol(data), function(x) all(data[,x] == colnames(data)[x])))
data = data[,-col_rm]
基本上代码的作用是查找列 x
的所有值是否都等于列的名称,并找到满足该条件的所有列,然后我用 -
.
这有帮助吗?
data = data.frame(name1=rep("name1",5), name2=rep("name2",5), name3=rep("name3",5), name4=rep("name4",5)) #Some test data
ColsToRemove <- names(data)[which(sapply(data[1,], function(x){x %in% names(data)}))] #Finds where the column name is the same as the first entry and marks it for deletion
cleanData = data[ , !(names(data) %in% ColsToRemove)] #This deletes the columns named
head(data)
head(cleanData)
您可以使用 sweep
来确定所有不等于 colnames
的值
data[colSums(sweep(data,2,colnames(data),"!="))>0]
我有一个包含一堆列的数据集,其中列值(该列的所有值)与该列名完全相同。我怎样才能删除该列。我无法一一删除列,因为有 700 多个变量。 谢谢!
这里有一个你如何做的例子:
data = data.frame(x1 = rep(1,10), x2 = seq(1,20,by = 2),
x3 = rep("x3",10), x4 = 1:10, x5 = rep("x5",10))
col_rm = which(sapply(1:ncol(data), function(x) all(data[,x] == colnames(data)[x])))
data = data[,-col_rm]
基本上代码的作用是查找列 x
的所有值是否都等于列的名称,并找到满足该条件的所有列,然后我用 -
.
这有帮助吗?
data = data.frame(name1=rep("name1",5), name2=rep("name2",5), name3=rep("name3",5), name4=rep("name4",5)) #Some test data
ColsToRemove <- names(data)[which(sapply(data[1,], function(x){x %in% names(data)}))] #Finds where the column name is the same as the first entry and marks it for deletion
cleanData = data[ , !(names(data) %in% ColsToRemove)] #This deletes the columns named
head(data)
head(cleanData)
您可以使用 sweep
来确定所有不等于 colnames
data[colSums(sweep(data,2,colnames(data),"!="))>0]