我有一个数据帧列表,我想循环遍历它们,并保留与某些列名的特定值匹配的行,我想传递这些列名及其相应值的向量。
示例:
DF1 =
x y
10 s
5 h
DF2 =
x z y
11 h h
5 s s
5 h s因此,我想循环遍历这些数据帧,并保留列名为(5,s)的(x,y)列的所有行。这只是一个示例,我想泛化我的代码。
我正在考虑这个,但它肯定不是这样工作的:
Data-Mining = sapply(DFlist,)我很感谢你的帮助。
发布于 2016-03-03 07:44:48
下面,我将重新创建您在示例中提供的两个data.frame对象,然后使用lapply和dplyr包中的两个函数根据您想要的输出进行选择和过滤。Select子集感兴趣的列,filter选择满足某些逻辑标准/标准的行。
library(dplyr)
DF1 = data.frame(x=c(10,5), y=c('s','h'))
DF2 = data.frame(x=c(11,5,5), z=c('h', 's', 'h'), y = c('h','s','s'))
DFlist <- list(DF1, DF2)
colsKeep <- c('x', 'y')
xRange <- 1:5
yVal <- 's'
lapply(DFlist, function(x){x %>%
select(one_of(colsKeep)) %>%
filter(x %in% xRange & y == yVal)})编辑:我现在指定要保留的列,以及我将在子集中接受的值。
发布于 2016-03-03 08:05:49
这样如何,依靠merge来保存行。如果您有许多变量要匹配,则可能比编写选择语句更容易。我添加了一个既没有x变量也没有y变量的额外数据集,以显示这是如何解决该问题的。
DF1 <- data.frame(x=c(10,5), y=c('s','h'))
DF2 <- data.frame(x=c(11,5,5), z=c('h', 's', 'h'), y = c('h','s','s'))
DF3 <- data.frame(a=1:3,b=2:4)
vals <- list(5, "s")
nams <- c("x","y")
lapply(list(DF1,DF2,DF3), function(DAT) {
DAT[setdiff(nams, names(DAT))] <- NA
merge(DAT, setNames(vals,nams), by=nams)
})
#[[1]]
#[1] x y
#<0 rows> (or 0-length row.names)
#
#[[2]]
# x y z
#1 5 s s
#2 5 s h
#
#[[3]]
#[1] x y a b
#<0 rows> (or 0-length row.names)https://stackoverflow.com/questions/35760416
复制相似问题