首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >根据每个数据帧的名称过滤命名列表中的数据帧

根据每个数据帧的名称过滤命名列表中的数据帧
EN

Stack Overflow用户
提问于 2019-04-19 23:33:59
回答 2查看 31关注 0票数 1

我在一个命名列表中有多个数据帧,下面是可重现的例子:

代码语言:javascript
复制
set.seed(1)
df1 <- data.frame(
  numbers = sample(1:10),
  boolean = sample(c("yes", "no"), 10, replace = TRUE)
)

df2 <- data.frame(
    letters = sample(LETTERS,10),
    numbers = sample(1:10),
    boolean = sample(c("yes", "no"), 10, replace = TRUE)
)
dataframes <- list(df1, df2)
names(dataframes) <- c("yes","no")

如何过滤第一个数据框以包含所有包含"yes“的行,以及如何过滤第二个数据框以包含包含"no”的行。

我试过了:

代码语言:javascript
复制
lapply(dataframes, function(x) filter(x, boolean==names(x))

但这并不起作用,只是给了我两个空的数据帧。不确定下一步要尝试什么。

EN

回答 2

Stack Overflow用户

发布于 2019-04-19 23:53:19

使用tidyverse,我们可以使用imap遍历list并使用.y,即用于filtering的list的名称

代码语言:javascript
复制
library(tidyverse)
imap(dataframes,  ~ .x %>% 
                        filter(boolean == .y))
#$yes
#  numbers boolean
#1       3     yes
#2       4     yes
#3       7     yes
#4       8     yes
#5      10     yes

#$no
#  letters numbers boolean
#1       Y       5      no
#2       F       6      no
#3       P       4      no
#4       C       2      no
#5       Z      10      no
#6       I       8      no
#7       X       7      no
#8       V       3      no
票数 1
EN

Stack Overflow用户

发布于 2019-04-20 02:37:30

使用base RMapsubset,我们可以做到

代码语言:javascript
复制
Map(function(x, y) subset(x, boolean == y), x = dataframes, y = names(dataframes))
#$yes
#  numbers boolean
#1       3     yes
#2       4     yes
#3       7     yes
#4       8     yes
#5      10     yes

#$no
#  letters numbers boolean
#1       Y       5      no
#2       F       6      no
#3       P       4      no
#4       C       2      no
#5       Z      10      no
#6       I       8      no
#7       X       7      no
#8       V       3      no
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55764253

复制
相关文章

相似问题

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