有没有办法过滤像这样的data.frame?我想保留所有行和列的位置,以及下一列。
df <- read.table(header=TRUE, stringsAsFactors = FALSE, text =
"date col2 col3 col4 col5 col6
1 boston 22 new_york 15 atlanta 5
2 boston 21 new_york 15 atlanta 0
")
cities <- c('boston', 'atlanta')
#filter by cities
#output
#col2 col3 col5 col6
#boston 22 atlanta 5
#boston 21 atlanta 0
答案 0 :(得分:0)
我们循环遍历数据集的备用列,检查是否所有元素都是%in%
个城市来创建逻辑向量(&#39; i1&#39;),然后根据索引获取列索引TRUE列和下一列
i1 <- sapply(df[c(TRUE, FALSE)], function(x) all(x %in% cities))
df[sort(which(names(df) %in% names(i1)[i1]) + rep(0:1, each = 2))]
或者另一种选择是循环遍历备用列索引的序列,对数据集进行子集化,检查if
在&#39; cities&#39;中找到所有元素,然后对列和下一列进行子集化(df[i:(i+1)]
),Fiter
列出list
元素为NULL,cbind
剩余元素
do.call(cbind, Filter(Negate(is.null), lapply(seq(1, ncol(df), by = 2),
function(i) if(all(df[,i] %in% cities)) df[i:(i+1)])))