通过名称或索引引用列的函数
A function for referring to columns by either name or index
我希望能够在一个向量中按名称和索引引用列。作为示例,我仅指定:
编辑:我更改了原始向量的顺序,因为我希望顺序无关紧要。
columns <- c(1:7, "j", 8, "i")
然后我想检索索引 1 到 9 的名称并将它们添加到向量中(在正确的位置)。我有一个大概的想法,但在编码方面我并没有走得太远:
library(data.table)
df <- fread(
"a b c d e f g h i j
1 2 3 4 5 6 7 8 9 10",
header = TRUE
)
function(data, columns){
nums <- as.numeric(columns)
named_columns <- ?
nums <- nums[!is.na(nums)]
name_nums <- colnames(df)[nums]
all_columns <- setdiff(named_colums, name_nums)
# Order of the original vector?
column_names <- result
}
然后 return 它到向量,这样结果将是:
column_names <- c("a", ..., "j", "h", "i")
谁能帮我更进一步?
如果我理解你的问题,你想传递一个包含列名和索引的向量,而你想返回一个只包含列索引的向量。那么以下内容应该有所帮助;
df <- data.table::fread("a b c d e f g h i j
1 2 3 4 5 6 7 8 9 10",
header = TRUE)
columns <- c(1:8, "i", 9, "j")
col2num <- function(df, columns){
nums <- as.numeric(columns)
nums[is.na(nums)] <- which(names(df)==columns[is.na(nums)])
return(nums)
}
col2num(df, columns)
#> Warning in col2num(df, columns): NAs introduced by coercion
#> [1] 1 2 3 4 5 6 7 8 9 9 10
我希望能够在一个向量中按名称和索引引用列。作为示例,我仅指定:
编辑:我更改了原始向量的顺序,因为我希望顺序无关紧要。
columns <- c(1:7, "j", 8, "i")
然后我想检索索引 1 到 9 的名称并将它们添加到向量中(在正确的位置)。我有一个大概的想法,但在编码方面我并没有走得太远:
library(data.table)
df <- fread(
"a b c d e f g h i j
1 2 3 4 5 6 7 8 9 10",
header = TRUE
)
function(data, columns){
nums <- as.numeric(columns)
named_columns <- ?
nums <- nums[!is.na(nums)]
name_nums <- colnames(df)[nums]
all_columns <- setdiff(named_colums, name_nums)
# Order of the original vector?
column_names <- result
}
然后 return 它到向量,这样结果将是:
column_names <- c("a", ..., "j", "h", "i")
谁能帮我更进一步?
如果我理解你的问题,你想传递一个包含列名和索引的向量,而你想返回一个只包含列索引的向量。那么以下内容应该有所帮助;
df <- data.table::fread("a b c d e f g h i j
1 2 3 4 5 6 7 8 9 10",
header = TRUE)
columns <- c(1:8, "i", 9, "j")
col2num <- function(df, columns){
nums <- as.numeric(columns)
nums[is.na(nums)] <- which(names(df)==columns[is.na(nums)])
return(nums)
}
col2num(df, columns)
#> Warning in col2num(df, columns): NAs introduced by coercion
#> [1] 1 2 3 4 5 6 7 8 9 9 10