【发布时间】: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在您的示例数据中?