r - 按数据框列条件对列表中的数据框进行子集化

标签 r

我有一个数据框列表。我需要根据数据帧一列中的标准对该列表的数据帧进行子集化。

(列表中的所有数据框具有相同的列数和名称以及相同的行数)

例如,我有:

l <- list(data.frame(x=c(2,3,4,5), y = c(4,4,4,4), z=c(2,3,4,5)),
data.frame(x=c(1,4,7,3), y = c(7,7,7,7), z=c(2,5,7,8)), 
data.frame(x=c(2,3,1,8), y = c(1,1,1,1), z=c(6,4,1,3)))

names(l) <- c("MH1", "MH2","MH3")

输出

$MH1
  x y z
1 2 4 2
2 3 4 3
3 4 4 4
4 5 4 5

$MH2
 x y z
1 1 7 2
2 4 7 5
3 7 7 7
4 3 7 8

$MH3
  x y z
1 2 1 6
2 3 1 4
3 1 1 1
4 8 1 3

所以我想对“y”列最接近给定数字的数据帧进行子集化。例如,如果我说 a=3,则所选数据帧应为“MH1”(其中列 y=4)

如果“l”是一个数据框,我会这样做:

closestDF <- subset(l, abs(l$y - a) == min(abs(l$y - a))

如何使用数据框列表执行此操作?

最佳答案

根据 @David Arenburg、@akrun 和 @shadow 的回答和评论,这里有我发布的问题的三种可能的解决方案:

选项 1)

library(data.table)
rbindlist(l)[abs(y - a) == min(abs(y - a))]

选项 2)(需要 R 版本 > 3.1.2)

library(dplyr)
bind_rows(l) %>% filter(abs(y-a)==which.min(abs(y-a)))

选项 3)(也可以完美运行,但如果在大循环或迭代过程中使用,计算速度比前 2 个选项慢)

l[[which.min(sapply(l, function(df) sum(abs(df$y - a))))]]

关于r - 按数据框列条件对列表中的数据框进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28210807/

相关文章:

r - 如何指定使用哪个库中的函数?

r - 使用多个 geom 时如何消除 ggplotly 重复的图例条目

r - ggplot 中按比例大小的箭头

r - 在 R 3.0.+ 中使用 .Call() 时出错

旋转 ggplot 树状图的标签

r - psych:主要 - 加载组件

r - 使用前一天的数据填充时间序列中的缺失值 - R

r - <我的</code>中的错误:分配目标扩展为非语言对象

R:如何将日期与 %b 转换为不同的语言

r - aeqSurv(Y) : aeqSurv exception, 中的错误间隔的有效长度为 0