使用R中的命名向量按列和行对表进行子集

u31889

diamonds(来自ggplot2库的)数据集为例,我试图基于命名元素的向量按列和行对表进行子集化(向量的名称应用于按列进行子集化,并使用对应的向量按行进行子集化) )。

library(ggplot2)
diamonds
# A tibble: 53,940 x 10
   carat cut       color clarity depth table price     x     y     z
   <dbl> <ord>     <ord> <ord>   <dbl> <dbl> <int> <dbl> <dbl> <dbl>
 1 0.23  Ideal     E     SI2      61.5    55   326  3.95  3.98  2.43
 2 0.21  Premium   E     SI1      59.8    61   326  3.89  3.84  2.31
 3 0.23  Good      E     VS1      56.9    65   327  4.05  4.07  2.31
 4 0.290 Premium   I     VS2      62.4    58   334  4.2   4.23  2.63
 5 0.31  Good      J     SI2      63.3    58   335  4.34  4.35  2.75
 6 0.24  Very Good J     VVS2     62.8    57   336  3.94  3.96  2.48
 7 0.24  Very Good I     VVS1     62.3    57   336  3.95  3.98  2.47
 8 0.26  Very Good H     SI1      61.9    55   337  4.07  4.11  2.53
 9 0.22  Fair      E     VS2      65.1    61   337  3.87  3.78  2.49
10 0.23  Very Good H     VS1      59.4    61   338  4     4.05  2.39
# … with 53,930 more rows

myVector <- c(cut="Ideal", cut="Good", color="E", color="J")
myVector
    cut     cut   color   color 
"Ideal"  "Good"     "E"     "J" 

我打算做的事情如下,但使用myVector

library(dplyr)
diamonds %>% subset(., (cut=="Ideal" | cut=="Good") & (color=="E" | color=="J")) %>%
select(cut, color)
瑞·巴拉达斯(Rui Barradas)

ThomasIsCodingsplit想法开始,稍有变化,这是基于Reduce/Map创建逻辑索引的基本R解决方案

v <- split(unname(myVector), names(myVector))
i <- Reduce('&', Map(function(x, y){x %in% y}, diamonds[names(v)], v))
diamonds[i, ]
## A tibble: 6,039 x 10
#   carat cut   color clarity depth table price     x     y     z
#   <dbl> <ord> <ord> <ord>   <dbl> <dbl> <int> <dbl> <dbl> <dbl>
# 1  0.23 Ideal E     SI2      61.5    55   326  3.95  3.98  2.43
# 2  0.23 Good  E     VS1      56.9    65   327  4.05  4.07  2.31
# 3  0.31 Good  J     SI2      63.3    58   335  4.34  4.35  2.75
# 4  0.3  Good  J     SI1      64      55   339  4.25  4.28  2.73
# 5  0.23 Ideal J     VS1      62.8    56   340  3.93  3.9   2.46
# 6  0.31 Ideal J     SI2      62.2    54   344  4.35  4.37  2.71
# 7  0.3  Good  J     SI1      63.4    54   351  4.23  4.29  2.7 
# 8  0.3  Good  J     SI1      63.8    56   351  4.23  4.26  2.71
# 9  0.23 Good  E     VS1      64.1    59   402  3.83  3.85  2.46
#10  0.33 Ideal J     SI1      61.1    56   403  4.49  4.55  2.76
## ... with 6,029 more rows

dplyr

上面的代码可以编写为函数,并用于中dplyr::filter

# Input:
# X - a data set to be filtered
# values - a named list
values_in <- function(X, values){
  v <- split(unname(values), names(values))
  i <- Reduce('&', Map(function(x, y){x %in% y}, X[names(v)], v))
  i
}

diamonds %>% filter( values_in(., myVector) )

输出与上面相同,因此被省略。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Basic R:使用逻辑向量按列对DF进行子集

在R中按行条件进行子集

按mysql和wordpress列对表中的数据进行排序

按R中的列值对表进行分组

按 R 中的列值对表行进行排序

R:按名称对命名向量中的元素进行排序

如何根据R中的多列对表数据进行子集化?

使用igraph按R中的edge属性对邻居进行排序和子集

使用R中的样本按列和行对矩阵进行采样

如何在一行代码中对R中的列进行子集和求和

在一行中按字数对字符串向量进行子集化

按名称绑定R中的命名向量

使用向量按列对大型R矩阵进行排序

使用引导程序按导轨中的列对表数据进行排序

如何按数据库中的列对表进行排序?

在R中按组条件进行子集

如何使用jQuery按两列对表格进行排序?

按行和列互惠子集

如何在Rcpp中对bigstatsr :: FBM的行或列进行子集并将其存储在向量中?

R:按名称的子集向量

如何基于R中列向量的升序/降序对列表进行子集

使用多个匹配对 R 中的多个列进行子集

使用行位置向量列表对数据帧列表中的行进行子集

R中的子集行按条件随机

如何使用 C++ 进行矩阵行和列命名?

如何在R中的单列中按字符串标签对行值进行子集化?

在 R 中的新向量中生成对列进行分组(按名称)的向量

如何基于R中一列的值对表进行子集/拆分?

R-基于列名(向量中)和那些列中的特定值的子集行