【问题标题】:Filter rows based on one column from a list of dataframes根据数据框列表中的一列过滤行
【发布时间】:2019-10-23 08:57:11
【问题描述】:

我有一个包含多个数据框的列表,我想通过每个数据框的一列中的某些值过滤列表中的这些数据框。列表中的每个数据框都有一个名为 v1 的列,其中包含特殊字符 ++、->,现在我只想过滤具有此 箭头的行(->) 在列表中的每个数据框中。这是我的数据框示例,

dput(df)
df1 <- structure(list(v1 = c("->", "++", "->"),
                      t2 = c("James","Jane", "Egg")),
                 class = "data.frame", row.names = c(NA,  -3L))

dput(df2)
df2 <- structure(list(v1 = c("++", "->", "->"),
                      t2 = c("James","Jane", "Egg")),
                 class = "data.frame", row.names = c(NA,  -3L))
dput(df3)
df3 <- structure(list(v1 = c("++", "++", "->"),
                      t2 = c("James","Jane", "Egg"),
                      d3...c = c("James","Jane", "Egg")),
                 class = "data.frame", row.names = c(NA,  -3L))

我已经尝试过了,但我没有得到过滤行的数据框

idx = "->"
dfs <- list(df1,df2,df3)
lapply(dfs, function(x) x$v1 %in% idx)

有人帮忙

【问题讨论】:

  • 你快到了。您的匿名函数必须返回您想要的,即 data.frame。 idx 中有什么内容?我假设它是你的目标,即idx &lt;- "++"。表达式x$v1 %in% idx 是一个逻辑(布尔)向量,您可以使用它来对data.frame 进行子集化。 df 是x[x$v1 %in% idx,]
  • @antoine-sac 我收到此错误 *x$v1 中的错误:$ 运算符对原子向量无效 *

标签: r dataframe


【解决方案1】:
idx <- "->"

# Base R
lapply(dfs, function(df) df[df$v1 == "->",])
lapply(dfs, function(df) df[df$v1 %in% idx,])

# tidyverse

library("purrr")
library("dplyr")

map(dfs, filter, v1 == "->")
map(dfs, filter, v1 %in% !! idx)

【讨论】:

  • 我收到此错误 * x$v1 中的错误:$ 运算符对原子向量无效 *
  • 我的回答中没有x,所以我不确定你跑的是什么。
  • 抱歉,df$v1 中的错误:$ 运算符对原子向量无效
  • 在您发布的示例中,dfs 是一个 data.frames 列表,因此代码可以正常工作。我怀疑您错误地将data.frame(而不是列表)用作dfs。由于 data.frame 在技术上是一个原子向量列表,你会得到这个错误。
  • 确定是问题所在。我已经修好了。谢谢
【解决方案2】:

试试这个:

idx <- "->"
fnct <- function(df){df <- df[df$v1 %in% idx, ]}
df1_idx <- fnct(df1)
df2_idx <- fnct(df2)
df3_idx <- fnct(df3)
dfs <- list(df1_idx, df2_idx, df3_idx)
dfs

结果:

[[1]]
  v1    t2
1 -> James
3 ->   Egg

[[2]]
  v1   t2
2 -> Jane
3 ->  Egg

[[3]]
  v1  t2 d3...c
3 -> Egg    Egg

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    相关资源
    最近更新 更多