【发布时间】:2022-01-22 16:41:54
【问题描述】:
我想使用数字向量过滤数据框。我正在应用以下功能:
test_data <- exp_data[exp_data$Size_Change %in% vec_data,]
示例数据如下所示:
dput(exp_data)
structure(list(Name = c("Mark", "Greg", "Tomas", "Morka", "Pekka",
"Robert", "Tim", "Tom", "Bobby", "Terka"), Mode = c(1, 2, NA,
4, NA, 3, NA, 1, NA, 3), Change = structure(c(6L, 2L, 4L, 5L,
7L, 7L, 7L, 8L, 3L, 1L), .Label = c("D[+58], I[+12][+385]", "C[+58], K[+1206]",
"C[+58], P[+2074]", "C[+58], K[+2172]", "C[+58], K[+259]", "C[+58], K[+2665]",
"C[+58], T[+385]", "C[+58], C[+600]"), class = "factor"), Size = c(1335.261,
697.356, 1251.603, 920.43, 492.236, 393.991, 492.239, 727.696,
1218.933, 495.237), Place = c(3L, 4L, 3L, 2L, 4L, 5L, 4L, 3L,
3L, 4L), Size_Change = c(4004, 2786, 3753, 1840, 1966, 1966,
1966, 2181, 3655, 1978)), row.names = 2049:2058, class = "data.frame")
和用于过滤的向量:
dput(vec_data)
c(4003, 2785, 954, 1129, 4013, 756, 1852, 2424, 1954, 246, 147,
234, 562, 1617, 2180, 888, 1176)
我提到了容差,因为vec_data 不是很精确,我期望数字有 +1/-1 的差异,并且在应用函数后它不会过滤具有这种差异的行。也可能会出现 +12/-12 或 +24/-24 的差异。我可以在过滤时以某种方式考虑它吗?
当然,可能的解决方案是像 (vec_data +1) / (vec_data -1) / (vec_data +12) 等那样做一些过滤尝试,最后可能是所有的 rbind 输出,但我正在寻找更“优雅”的方式。如果可以添加一个列来指示该行是如何过滤的,如果它是来自vec_data 的确切数字或者它被+1、+12、-24 或其他修改,那也很棒。请注意,+1/-1 与任何其他修改的组合也是可能的。如果它太复杂,则不需要额外的列。
【问题讨论】:
-
如果你得到
Error: unexpected token,你可能使用的是R版本update your R。
标签: r