r - 根据 data.frame 的一对或多对值创建子集函数

标签 r function dataframe subset

如何使函数使用一对或多对值(x1,y1 ; x2,y2 ; ... 根据需要)对数据框进行子集化,如

selection <- function(x1,y1, ...){
               dfselected    <- subset(df, V1 == "x1" & V2 == "y1" 
              ##  MAY OR MAY NOT BE PRESENT ##
                                         | V1 == "x2" & V2 == "y2")
               return(dfselected)
                                  }

我可以用 subset()对于单个索引。例子:
df <- data.frame(
        V1 = c(rep("a",5), rep("b",5)),
        V2 = rep(c(1:5),2),
        V3 = c(101:110)
                 )

IE
V1 V2  V3
a  1  101
a  2  102
a  3  103
a  4  104
a  5  105
b  1  106
b  2  107
b  3  108
b  4  109
b  5  110

并且夫妇 ("a","3") 和 ("b","4") 的子集看起来像
dfselected <- subset(df, V1 == "a" & V2 == 3 | V1 == "b" & V2 == 4 )

我找不到类似的功能。我不知道我是否必须将未指定数量的参数传递给函数(所谓的“三个点”)或使用 if/else .我是函数的初学者,因此也欢迎链接或示例。
我主要是从那个开始的:http://www.ats.ucla.edu/stat/r/library/intro_function.htm

------------------------------ 哈德利回答后的解决方案
selection <- function (x,y){
                            match <- data.frame(
                                               V1 = x,
                                               V2 = y,
                                               stringsAsFactors = FALSE
                                                )
                            return(dplyr::semi_join(df, match))
                           }

最佳答案

听起来你想要一个半连接:在 x 中找到所有在 y 中有匹配条目的行:

df <- data.frame(
  V1 = c(rep("a",5), rep("b",5)),
  V2 = rep(c(1:5), 2),
  V3 = c(101:110),
  stringsAsFactors = FALSE
)

match <- data.frame(
  V1 = c("a", "b"),
  V2 = c(3L, 4L),
  stringsAsFactors = FALSE
)

library(dplyr)
semi_join(df, match)

关于r - 根据 data.frame 的一对或多对值创建子集函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21456282/

相关文章:

r - 你如何(以及为什么)使用对比?

R plotly : Adjust absolute marker size on 3D scatterplot

C - 在没有参数的情况下调用用参数声明的函数?

python - 要插入数据框-pandas 中的选定行

python - “DataFrame”对象不可调用

r - 如何根据特定位置的受访者人数进行过滤?错误:Error in FUN(left, right):

r - 以相等的间隔对数据帧中的组中的数据进行分箱的更好方法

java - 计算存储在数组中的所有相邻节点列表

python - 按行位置读取文件

python - Pandas 将 int 值转换为数据框中的 float