假设我有以下向量:
x <- c(8, 6, 9, 9, 7, 3, 2, 5, 5, 1, 6, 8, 5, 2, 9, 3, 5, 10, 8, 2)
Run Code Online (Sandbox Code Playgroud)
如何找到哪些元素是8或9?
我有一个带有ID列的数据框和几列值.我想仅根据该行中ID的值是否与另一组值匹配(例如,称为"keep")来保留数据帧的某些行.
为简单起见,这是一个例子:
df <- data.frame(ID = sample(rep(letters, each=3)), value = rnorm(n=26*3))
keep <- c("a", "d", "r", "x")
Run Code Online (Sandbox Code Playgroud)
如何创建一个新的数据框,其中的行只包含与keep相匹配的ID?我可以通过使用该which()
函数只为一个字母执行此操作,但是使用多个字母我会收到警告消息和错误的返回.我知道我可以在数据框中运行for循环并以此方式推断,但我想知道是否有更优雅和有效的方法来解决这个问题.提前致谢.
我有几种算法取决于确定元素是否存在于向量中的效率.在我看来%in%
(相当于is.element()
)应该是最有效的,因为它只返回一个布尔值.在测试了几种方法后,令我惊讶的是,这些方法到目前为止效率最低.以下是我的分析(随着矢量大小的增加,结果变得更糟):
EfficiencyTest <- function(n, Lim) {
samp1 <- sample(Lim, n)
set1 <- sample(Lim, Lim)
print(system.time(for(i in 1:n) {which(set1==samp1[i])}))
print(system.time(for(i in 1:n) {samp1[i] %in% set1}))
print(system.time(for(i in 1:n) {is.element(samp1[i], set1)}))
print(system.time(for(i in 1:n) {match(samp1[i], set1)}))
a <- system.time(set1 <- sort(set1))
b <- system.time(for (i in 1:n) {BinVecCheck(samp1[i], set1)})
print(a+b)
}
> EfficiencyTest(10^3, 10^5)
user system elapsed
0.29 0.11 0.40
user system elapsed
19.79 0.39 20.21
user system elapsed
19.89 0.53 20.44
user system elapsed
20.04 0.28 20.33 …
Run Code Online (Sandbox Code Playgroud) 我有一个向量“A”,对于 AI 的每个元素,我想检查它是否等于第二个向量“目标”中的任何元素。我想要一个长度为 A 的逻辑值向量作为返回。
这里提到了同样的问题。这是有关如何测试向量是否包含特定值的相关讨论,但我不知道如何将其应用于我的问题,因为我想要一个向量作为输出而不是单个布尔值。
这是示例代码:
#example data
A <- c(rep("A",4),rep(c("B","C"),8))
Targets <- c("A","C","D")
Run Code Online (Sandbox Code Playgroud)
我想要一个向量,它告诉我 A 的每个元素是否等于 Targets 中的至少一个元素。例如,这应该生成一个与以下内容相同的向量:
result <- c(rep("TRUE",4), rep(c("FALSE","TRUE"), 8))
Run Code Online (Sandbox Code Playgroud)
如果这是相关的,最终向量 A 将更长(大约 20000 个元素),并且向量目标将包含大约 30 个元素。
假设我在R中有一个数字向量.我想知道向量中是否存在特定的整数.我们可以使用'in'命令在python中轻松完成,if语句可能是.
我们在R中也有类似的东西吗?所以我不必使用for循环来检查我想要的整数是否存在于向量中?我尝试了以下,但似乎没有用.'normal'是数据帧,第二列是整数.
if (12069692 in normal[,2]) {print("yes")}
Run Code Online (Sandbox Code Playgroud)
说,
Error: unexpected 'in' in "if (12069692 in"
Run Code Online (Sandbox Code Playgroud) 这可能是一个重复的问题,但我做了一些搜索,可能找不到合适的关键字来搜索...
是否有一个函数可以测试变量值是否包含在一组特定的值中?
例如,假设我有这个神奇的函数“包含”,我希望它具有以下属性:
contains(value = 5, set = c(2:6))
会回来TRUE
,哪里
contains(value = 5, set = c(2,3,4,6,7))
会回来FALSE
。
显然,我可以创建这个函数,但我希望存在一个包或选项。