首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将某些列保留在R中

将某些列保留在R中
EN

Stack Overflow用户
提问于 2016-03-03 07:37:31
回答 2查看 1.4K关注 0票数 1

我有一个数据帧列表,我想循环遍历它们,并保留与某些列名的特定值匹配的行,我想传递这些列名及其相应值的向量。

示例:

代码语言:javascript
复制
DF1 =
x   y
10  s
5   h

DF2 =

x  z   y
11  h   h
5   s  s
5   h  s

因此,我想循环遍历这些数据帧,并保留列名为(5,s)的(x,y)列的所有行。这只是一个示例,我想泛化我的代码。

我正在考虑这个,但它肯定不是这样工作的:

代码语言:javascript
复制
Data-Mining = sapply(DFlist,)

我很感谢你的帮助。

EN

回答 2

Stack Overflow用户

发布于 2016-03-03 07:44:48

下面,我将重新创建您在示例中提供的两个data.frame对象,然后使用lapplydplyr包中的两个函数根据您想要的输出进行选择和过滤。Select子集感兴趣的列,filter选择满足某些逻辑标准/标准的行。

代码语言:javascript
复制
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)})

编辑:我现在指定要保留的列,以及我将在子集中接受的值。

票数 1
EN

Stack Overflow用户

发布于 2016-03-03 08:05:49

这样如何,依靠merge来保存行。如果您有许多变量要匹配,则可能比编写选择语句更容易。我添加了一个既没有x变量也没有y变量的额外数据集,以显示这是如何解决该问题的。

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35760416

复制
相关文章

相似问题

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