在data.frame中按名称访问列:如果列不',则返回NA;不存在
是否有更有效的方法通过名称检查列的存在性,如果列存在则返回列,如果不存在则返回na 现在我使用以下函数:在data.frame中按名称访问列:如果列不',则返回NA;不存在,r,dataframe,lookup,na,columnname,R,Dataframe,Lookup,Na,Columnname,是否有更有效的方法通过名称检查列的存在性,如果列存在则返回列,如果不存在则返回na 现在我使用以下函数: TryGetColumn <- function(x, column.name, column.names, value.if.not.exists) { if (column.name %in% column.names) { x[, column.name] } else { value.if.not.exists } }
TryGetColumn <- function(x, column.name, column.names, value.if.not.exists) {
if (column.name %in% column.names) {
x[, column.name]
} else {
value.if.not.exists
}
}
df <- data.frame(a = 1:5, b = 6:10)
col.names <- colnames(df)
ab <- TryGetColumn(df, "a", col.names, NA) + TryGetColumn(df, "b", col.names, NA)
ac <- TryGetColumn(df, "a", col.names, NA) + TryGetColumn(df, "c", col.names, NA)
ab
#[1] 7 9 11 13 15
ac
#[1] NA NA NA NA NA
TryGetColumn我会使用match
match(x = c("mpg", "disp", "blarg"), table = names(mtcars), nomatch = NA)
# [1] 1 3 NA
如果编写包装器,则不需要分别传递数据帧及其列:
column_index <- function(data, column.names, value.if.not.exists = NA) {
match(x = column.names, table = names(data), nomatch = value.if.not.exists)
}
column\u index我会使用match
match(x = c("mpg", "disp", "blarg"), table = names(mtcars), nomatch = NA)
# [1] 1 3 NA
如果编写包装器,则不需要分别传递数据帧及其列:
column_index <- function(data, column.names, value.if.not.exists = NA) {
match(x = column.names, table = names(data), nomatch = value.if.not.exists)
}
column\u index@EldarAgalarov,那么您可以在同一个目录中使用fastmatch::fmatch()manner@EldarAgalarov,然后可以以相同的方式使用fastmatch::fmatch()