比方说,我有多个相同列的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?),并且不想使用列表。
任何帮助将不胜感激。
答案 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")