根据它们的位置将名称分配给矢量中某些范围的值 [R]

Assigning names to certain ranges of values in vector based on their positions [R]

我有一个存储一些值的数值向量,例如:

vec <- sample(200:800, 20, replace = TRUE)

还有两个数字变量表示该向量中的特定位置,例如:

pos1 <- 6
pos2 <- 12

我想命名给定 vec 中的所有值,它们是 < pos1“front”,values > pos2“end”和这两个坐标“middle”之间的值。

我是 R 的初学者。我知道如何使用多行代码来做到这一点,但我将不胜感激一些更直接、更优化的解决方案。

这是我的代码:

vec <- sample(200:800, 20, replace = TRUE)
positions <- 1:length(vec)
pos1 <- 6
pos2 <- 12

front <- positions[1:pos1-1]
middle <- positions[pos1:pos2]
end <- positions[(pos2+1):length(positions)]

segmentation <- c(rep("front", length(front)), rep("middle", length(middle)), rep("end", length(end)))
vec2 <- vec
vec2 <- setNames(segmentation, vec)

我也知道如何通过创建一个 df 然后提取命名的 vec 来实现这个技巧,但我想避免这种情况。

非常感谢你的帮助。

在您的问题中,您用逻辑描述了您的问题,那么为什么不使用 ifelse():

将文字逻辑转换为逻辑呢?
# Create a toy vector with dummy names
vec <- sample(200:800, 20, replace = TRUE)
names(vec) <- 1:length(vec)

# Define criteria for naming
pos1 <- 6
pos2 <- 12

# Use logic to define names in toy vector
names(vec) <- ifelse(as.numeric(names(vec)) < pos1,
                     yes = "front",
                     no = ifelse(as.numeric(names(vec)) > pos2,
                                 yes = "back",
                                 no = "middle"))
vec
#>  front  front  front  front  front middle middle middle middle middle middle 
#>    762    205    469    484    653    491    505    432    783    345    366 
#> middle   back   back   back   back   back   back   back   back 
#>    664    498    706    248    547    317    695    749    225
Created on 2021-10-20 by the reprex package (v2.0.1)