Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在data.frame中按名称访问列:如果列不',则返回NA;不存在_R_Dataframe_Lookup_Na_Columnname - Fatal编程技术网

在data.frame中按名称访问列:如果列不',则返回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 } }

是否有更有效的方法通过名称检查列的存在性,如果列存在则返回列,如果不存在则返回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
    }
}

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()