首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从data.frame中删除行

无法从data.frame中删除行
EN

Stack Overflow用户
提问于 2021-01-27 07:44:42
回答 1查看 37关注 0票数 0

我有一系列excel文件,我已经使用这个基本代码导入我的数据很长时间了。我没有对数据或代码做任何修改,但是我不再正确地读取数据了。我读了这些文件如下:

代码语言:javascript
复制
apply_fun <- function(filename) {
  data <- readxl::read_excel(filename, sheet = "Section Cut Forces - Design", 
                       skip = 1, col_names = TRUE) 
  data <- data[-1,] 
  data <- subset(data, StepType == "Max")
  data <- data[,c(1,2,6,10)]
  data$id <- filename
  return(data)
}

filenames <- list.files(pattern = "\\.xlsx", full.names = TRUE)

first <- lapply(filenames,apply_fun)
out <- do.call(rbind,first)

out的前几行如下所示:

代码语言:javascript
复制
structure(list(SectionCut = c("1", "1", "1", "1", "1", "2", "2", 
"2", "2", "2"), OutputCase = c("Service (after losses)", "LL-1", 
"LL-2", "LL-3", "LL-4", "Service (after losses)", "LL-1", "LL-2", 
"LL-3", "LL-4"), V2 = c("11.522", "28.587", "42.246000000000002", 
"44.212000000000003", "36.183", "9.8469999999999995", "23.989000000000001", 
"37.408999999999999", "43.401000000000003", "40.450000000000003"
), M3 = c("299728.66100000002", "42863.517999999996", "63147.332999999999", 
"69628.464000000007", "59196.74", "0", "27.942", "44.863999999999997", 
"46.31", "36.204999999999998"), id = c("./100-12-S00.xlsx", "./100-12-S00.xlsx", 
"./100-12-S00.xlsx", "./100-12-S00.xlsx", "./100-12-S00.xlsx", 
"./100-12-S00.xlsx", "./100-12-S00.xlsx", "./100-12-S00.xlsx", 
"./100-12-S00.xlsx", "./100-12-S00.xlsx")), row.names = c(NA, 
-10L), class = c("tbl_df", "tbl", "data.frame"))

我试图将行移除如下:

代码语言:javascript
复制
out2 <- out[!grep("Service (after losses)", out$OutputCase),]

但结果是0。

我必须说,这对我来说才刚刚开始成为一个问题。几个月来,我一直能够成功地运行这段代码,而且从来没有出现过任何问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-27 07:49:03

()是正则表达式中的特殊符号。当您在grep/grepl等函数中使用它们时,它们具有特殊的意义。您可以在grep中使用fixed = TRUE来精确匹配它们。此外,!应与grepl一起使用,-应与grep一起使用以删除行。

代码语言:javascript
复制
out[-grep("Service (after losses)", out$OutputCase, fixed = TRUE),]

除此之外,这看起来像一个精确的匹配,所以为什么使用模式匹配与grep?试着:

代码语言:javascript
复制
out[out$OutputCase != 'Service (after losses)', ]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65914811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档