根据 R 中的名称向量删除列

标签 r list function loops dataframe

我有一个data.frameDATA 。使用BASE R,我想知道如何删除 DATA 中的任何变量其名称为以下任意一个:ar = c("out", "Name", "mdif" , "stder" , "mpre")

目前,我使用DATA[ , !names(DATA) %in% ar]但是,虽然这删除了不需要的变量,但它再次创建了一些新的令人讨厌的变量,后缀为 .1 .

提取后是否可以只删除后缀?

注意1:我们无法访问r ,唯一的输入是 DATA .

注2:这是玩具数据,我们赞赏功能性解决方案。

r <- list(
 data.frame(Name = rep("Jacob", 6), 
           X = c(2,2,1,1,NA, NA), 
           Y = c(1,1,1,2,1,NA), 
           Z = rep(3, 6), 
         out = rep(1, 6)), 

 data.frame(Name = rep("Jon", 6), 
           X = c(1,NA,3,1,NA,NA), 
           Y = c(1,1,1,2,NA,NA), 
           Z = rep(2, 6), 
         out = rep(1, 6)))

DATA <- do.call(cbind, r)  ## DATA

ar = c("out", "Name", "mdif" , "stder" , "mpre") # The names for exclusion

DATA[ , !names(DATA) %in% ar]      ## Current solution
#>
#    X  Y Z X.1 Y.1 Z.1          ## X.1 Y.1 Z.1  are automatically created but no needed
# 1  2  1 3   1   1   2
# 2  2  1 3  NA   1   2
# 3  1  1 3   3   1   2
# 4  1  2 3   1   2   2
# 5 NA  1 3  NA  NA   2
# 6 NA NA 3  NA  NA   2

最佳答案

理想情况下,列名称应该是唯一的,但如果您想保留重复的列名称,我们可以在提取后使用 sub 删除后缀

DATA1 <- DATA[ , !names(DATA) %in% ar] 
names(DATA1) <- sub("\\.\\d+", "", names(DATA1))

DATA1
#   X  Y Z  X  Y Z
#1  2  1 3  1  1 2
#2  2  1 3 NA  1 2
#3  1  1 3  3  1 2
#4  1  2 3  1  2 2
#5 NA  1 3 NA NA 2
#6 NA NA 3 NA NA 2

关于根据 R 中的名称向量删除列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58262597/

相关文章:

r - 如何使用来自变量的常量在 R 中编写数学方程?

r - 在 R 中索引冗余命名的向量

r - 如何增强 lpsolve R 优化解决方案以在 hadoop 集群上运行?

python - 如何查找列表中的项目(不使用 "in"方法)?

c++ - 对列表中的每个对象调用成员函数,改变对象所在的列表

r - 如何在 R 中聚合关闭时间事件

python - 嵌套列表迭代

javascript - 为什么我的 php echo 不起作用?

C# Azure Function 正在对 URL 中的 '/' 进行切片

php - 从函数中获取变量值