我正在寻找一种方法来 Select 与特定列相邻的数据/列.例如,假设我想 Select "cat\u weight"左侧和右侧的两列

df <- data.frame(dog_height = 1:5,
                 dog_weight = 2:6,
                 cat_height = 3:7,
                 cat_weight = 4:8,
                 bird_height = 5:9,
                 bird_weight = 6:10
)

所以在这种情况下,这将是"dog\u weight"、"cat\u height"、"bird\u height"和"bird\u weight".到目前为止,我try 的只是根据我感兴趣的列的索引号创建变量作为索引值,例如.

IDvar <- which(colnames(df)=="cat_weight")
IDvar_left_1 <- IDvar-2
IDvar_left_2 <- IDvar-1
IDvar_right_1 <- IDvar+1
IDvar_right_2 <- IDvar+2

cols_left <- df[,IDvar_left_1:IDvar_left_2]
cols_right <- df[,IDvar_right_1:IDvar_right_2]

这是可行的,但我忍不住认为一定有更优雅的解决方案?

当然,我的真实数据要大得多,因此需要一些更复杂的索引(例如,排除与感兴趣的列直接相邻的列),所以只需要try 制定一个简单的方法来应用!

推荐答案

你有一个好主意,这里有一个使用dplyr的解决方案:

library(dplyr)

df <- data.frame(dog_height = 1:5,
                 dog_weight = 2:6,
                 cat_height = 3:7,
                 cat_weight = 4:8,
                 bird_height = 5:9,
                 bird_weight = 6:10
)


get_range <- function(central_column,
                      max_range){
  range <- seq(which(colnames(df)==central_column)[[1]]-max_range,
               which(colnames(df)==central_column)[[1]]+max_range)
  
  range[! range %in% which(colnames(df)==central_column)]
}



df |> 
  select(all_of(get_range("cat_weight",2))) 

输出:

  dog_weight cat_height bird_height bird_weight
1          2          3           5           6
2          3          4           6           7
3          4          5           7           8
4          5          6           8           9
5          6          7           9          10

R相关问答推荐

R dðr按时间间隔进行总结

从R中的地址提取街道名称

将带有范围的字符串转换为R中的数字载体

geom_Ribbon条件填充创建与数据不匹配的形状(ggplot 2 r)

根据收件箱中的特定值提取列名

在位置周围设定一个半径并识别该半径内的其他位置

R中的子集文件—读取文件名索引为4位数字序列,例如0001到4000,而不是1到4000)

ggplot2中的X轴显示数值,单位为百,而不是十

如何在编辑列时更新可编辑数据表,并使用该表在Shiny中执行连续计算

二维样条,严格以一个参数递增

在R中为马赛克图中的每个字段着色

使用geom_segment()对y轴排序

在使用bslb和bootstrap5时,有没有办法更改特定dt行的 colored颜色 ?

计算数据帧中指定值之前的行数,仅基于每行之后的future 行,单位为r

`夹心::vcovCL`不等于`AER::tobit`标准错误

如何在PrePlot()中将多个元素设置为斜体

错误包arrowR:READ_PARQUET/OPEN_DATASET&QOT;无法反序列化SARIFT:TProtocolException:超出大小限制&Quot;

Conditional documentr::R中数据帧的summarize()

R将函数参数传递给ggploy

Broom.Mixed::Augment不适用于Sample::分析