gpt4 book ai didi

为数据框中不存在的列返回 NA 或 NULL

转载 作者:行者123 更新时间:2023-12-02 05:40:10 24 4
gpt4 key购买 nike

我正在寻找一种优雅的方法来返回列的值(如果存在)和(向量)NANULL(如果不存在)。直接处理它会产生 undefined columns 错误,使用子集会产生 0 列数据框。是否有一种优雅的内置方式,而不是定义一个函数来执行此操作?

> example(data.frame)
# output omitted
> head(d, 1)
x y fac
1 1 1 A
> head(d['x'], 1)
x
1 1

# Works when accessing column using $
> head(d$z, 1)
NULL
# Not satisfactory
> head(d['z'], 1)
Error in `[.data.frame`(d, "z") : undefined columns selected
> head(d[colnames(d) == 'z'], 1)
data frame with 0 columns and 1 rows

编辑:当然,这条单线就可以完成这项工作。我正在寻找更多 R 风格的方法。

> safe.index <- function(df, n)
if (any(n %in% colnames(df))) df[n] else rep(NA, nrow(df))
> head(safe.index(d, 'z'), 1)
[1] NA

最佳答案

解决这个问题的一种方法是测试是否存在,在这种情况下,'z'd 的列名称中在尝试子集之前:

if('z' %in% names(d)){
head(d['z'],1)
} else {
NA
}

另一种方法是使用 tryCatch和条件处理:

# Actually, the following line defining e isn't really necessary.
# e <- simpleError("stopped")
safe.index <- function(df, n){
tryCatch(df[n], error = function(e)return(rep(NA, nrow(df))))
}
head(safe.index(d, 'z'), 1)
# [1] NA

head(safe.index(d, 'x'), 1)
# x
# 1 1

一个潜在的缺点是上述解决方案使用 tryCatch会返回 NA vector 不管什么错误,不仅在n的情况下不是列名。

关于为数据框中不存在的列返回 NA 或 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11098267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com