gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 01:05:22 28 4
gpt4 key购买 nike

如何使函数使用一对或多对值(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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com