我想从 R 中的向量中选择某些元素(按索引)。但是,我希望结果向量还包含我在其末尾未指定的其余元素(即输出应与输入向量的长度相同,并且每个元素应仅返回一次)。输入向量可以是任意长度。
本质上,我正在寻找类似 dplyr 中的选择过程的东西:
df %>%
select(col1, col2, everything())
其中 everything() 确保未指定的列仍然返回到输出数据框中指定列的右侧。
例子
假设我想从下面的每个向量中选取第二和第四个元素
Vector1 <- c("apple", "pear", "peach", "plum", "orange")
Vector2 <- c("lettuce", "carrot", "broccoli", "peas", "onion", "kale", "courgette")
预期输出为:
来自向量 1:“梨”“李子”“苹果”“桃子”“橙子”
来自向量 2:“胡萝卜”“豌豆”“生菜”“西兰花”“洋葱”“羽衣甘蓝”“西葫芦”
可能的解决方案
以下方法可行,但有点冗长。对于Vector1
,代码如下:
Vector1[c(2, 4, setdiff(1:length(Vector1), c(2, 4)))]
这给出了上面指定的预期输出:
将其放入函数中:
move_elements_to_start_of_vector <- function(vector, element_indices_for_start){
element_indices_for_end <- setdiff(1:length(vector), element_indices_for_start)
order_of_elements <- c(element_indices_for_start, element_indices_for_end)
return(vector[order_of_elements])
}
检查其是否有效:
move_elements_to_start_of_vector(Vector2, c(2, 4))
也给出了预期的输出。
是否存在更简单的函数来实现与基础 R 或通用库中现有的相同结果?
您可以像平常一样通过索引提取元素
[c(2,4)]
。然后您可以删除它们,这将保留剩余元素的顺序[-c(2,4)]
。使用 将这两个向量合并为一个
c()
。forder
您可以定义如下函数