从多个数据框中删除列

时间:2018-12-09 09:21:07

标签: r dataframe

比方说,我有多个相同列的data.frame,但顺序不同。我想一次从所有数据框中删除一列。例如,存在名为“ Group 1”和“ Group 2”的列。 我尝试过但是失败了。

remover<-function(input){

  input<-input[,-c("Group 1","Group 2")]

  return(input)

}

此外,我看到了此链接(How to remove certain columns in multiple data frames in R?),并且不想使用列表。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

首先,将变量名与空格一起使用不是很明智。请改用点,例如"Group.1"

第二,虽然c("Group 1","Group 2")有效,但是-c("Group 1","Group 2")无效,因为您正在尝试对字符进行算术:- "Group.1"没什么意义,对吗?

因此我们可以使用%in%which()来匹配元素,而remover <- function(input) { input <- input[, -which(names(input) %in% c("Group.1", "Group.2"))] return(input) } x1 <- remover(df1) > x1 X1 X2 1 4 10 2 5 11 3 6 12 是一种匹配运算符。

-

还有另一种方法可以实现对别名的否定,而不是!。我们可以使用remover2 <- function(input) { input <- input[, which(!names(input) %in% c("Group.1", "Group.2"))] return(input) }

!

使用Unit: microseconds expr min lq mean median uq max neval cld remover(df1) 26.789 28.065 30.27720 28.321 28.831 18419.152 1e+05 a remover2(df1) 26.534 27.810 30.09483 28.065 28.576 6056.713 1e+05 a > all.equal(x1, x2) [1] TRUE 可能会有一点速度优势。

df1 <- data.frame(matrix(1:12, 
                         3, 4, 
                         dimnames=list(NULL, c("Group.1", "X1", 
                                               "Group.2", "X2"))))

数据:

compareusr = str(input())

compare = "austin" or "cloud"
if compare == compareusr:
    print("it worked")
else:
    print("it didnt work")