我在 R 中有以下“列表”:
[[1]]
[1] 17336 5246 8597 5246 17878 19701
[[2]]
[1] 19701 37748 18155 5246 8597
[[3]]
[1] 12297 19701 17878 5246 17336 8597 17878
[[4]]
[1] 17878 37748 19701 37748 12297 8597
[[5]]
[1] 19701 37748 19701 37748 19701 5246
[[6]]
[1] 19701 6254 17336 18155 19701 12297
[[7]]
[1] 19701 17878 18155 17878 18155 19701 8597
[[8]]
[1] 8597 18155
[[9]]
[1] 12450 18155 5246 8597 5246 8597
[[10]]
[1] 18155 4105 6254 17878 12297 5246
[[11]]
[1] 8597 12297
[[12]]
[1] 17878 5246 18155 17878 12297 8597
[[13]]
[1] 8597 18155
[[14]]
[1] 5246 37748 18155 12450 18155 8597
[[15]]
[1] 19701 37748 6254 8597 6254 8597 12297
[[16]]
[1] 19701 17878 4105 37748 18155 19701 12450 12297
[[17]]
[1] 6254 12450 37748 17878 5246 17878 8597
[[18]]
[1] 8597 12297 18155 5246 18155 12297
[[19]]
[1] 4105 37748 17878 5246 12450 5246 12450
[[20]]
[1] 17878 20467
[[21]]
[1] 20467
[[22]]
[1] 12450 37748 12450 17878 12450 12297
[[23]]
[1] 6254 17878 12450 12297 5 4105 27697 4105 27697
[[24]]
[1] 4105 37748 17878 20467 12450 17878 27697
[[25]]
[1] 5246 27697 5246 17336 17878 5246 12297 20467
我想找到最快的方法来查看此列表并查找是否有任何元素是特定值,将其称为“引用值”。例如,如果引用值为“5”,那么我想识别元素 [[23]]
中有一个“5”。我想做的是改变那个元素,让它变成:
[[23]] 4105 27697 4105 27697
最佳答案
使用@SymbolixAU 的数据:
lapply(lst, function(x) tail(x, -Position(isTRUE, x==5, nomatch=-Inf)) )
#[[1]]
#[1] 1 2 3
#
#[[2]]
#[1] 2 3 4
#
#[[3]]
#numeric(0)
#
#[[4]]
#[1] 6
解释它是如何工作的:
1) 中间的 Position
部分只返回第一次检测到 5
时索引的负数,即:
sapply(lst, function(x) -Position(isTRUE, x==5, nomatch=-Inf) )
#[1] Inf Inf -3 -2
2) tail(x, -n)
只是从向量中删除前 n
值。当使用 Inf
运行时,不会删除任何内容。因此,当没有找到 5
时,为什么在实例中使用 Inf
。
关于r - 识别子列表中的唯一元素并更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38135205/