【问题标题】:Remove rows based on two conditions from data frame in R从R中的数据框中删除基于两个条件的行
【发布时间】:2022-06-10 18:45:02
【问题描述】:

我需要根据两个条件有选择地从数据框中删除行:行标签必须与预定义字符向量中的任何值匹配,列标签也必须与另一个预定义的部分匹配字符向量。我目前正在按如下方式进行操作,但需要(很多)更快的解决方法来避免使用循环。原始数据框 > 200k 行。

# generate a random data frame
df.data <- runif(2000, 0,1)
df <- as.data.frame(matrix(df.data, nrow = 100, ncol = 20, dimnames = list(rownames = seq(1,100), colnames = paste(c("A", "B", "C", "D"), rep(seq(50,250, by = 50),4), sep = "_"))))

# predefined character vectors containing strings for matching
columns_to_filter <- c("150", "250")
rows_to_filter <- sort(round(runif(50, min = 1, max = 100), digits = 0))



# the actual loop to match and replace matched values with NA
for(ii in 1:ncol(df)){
  for(jj in 1:nrow(df)){
    if(length(which(str_detect(colnames(df)[ii], heights_to_filter)) == TRUE) > 0){
      if(jj %in% rows_to_filter){
        df[jj,ii] <- NA
      }
    } else{
      df[jj,ii] <- df[jj,ii]
    }
  }
}


# removes rows containing NAs
df <- na.omit(df) 
dim(df)

希望有任何线索。谢谢。

【问题讨论】:

  • “列标签”是指“列名”吗?例如,A_250 在您的示例数据中?

标签: r dataframe


猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-28
  • 2019-06-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多