假设我有以下向量:
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。
显然,我可以创建这个函数,但我希望存在一个包或选项。