我有一个名为“abcframe”的data.frame
a b c
1 1 1
2 2 3
如何查找给定数据框中是否存在列?例如,我想查找data.frame abcframe中是否存在列 d。
我有一个名为“abcframe”的data.frame
a b c
1 1 1
2 2 3
如何查找给定数据框中是否存在列?例如,我想查找data.frame abcframe中是否存在列 d。
假设您的数据框的名称是dat
并且您要检查的列名称是"d"
,您可以使用%in%
运算符:
if("d" %in% colnames(dat))
{
cat("Yep, it's in there!\n");
}
您有多种选择,包括使用%in%
and grepl
:
dat <- data.frame(a=1:2, b=2:3, c=4:5)
dat
a b c
1 1 2 4
2 2 3 5
要获取列的名称:
names(dat)
[1] "a" "b" "c"
用于%in%
检查成员资格:
"d" %in% names(dat)
[1] FALSE
Or use `grepl` to check for a match:
grepl("d", names(dat))
[1] FALSE FALSE FALSE
你可以使用any
:
> names(dat)
[1] "a" "b" "c"
> any(names(dat) == 'b')
[1] TRUE
> any(names(dat) == 'B')
[1] FALSE
您还可以使用if(!is.null(abcframe$d))
来测试是否d
存在于abcframe
.
dat <- data.frame(a = 1:2, b = 2:3, c = 4:5)
if (!is.null(dat$d)) {
print("d exists")
} else {
print("d does not exist")
}
if (!is.null(dat$a)) {
print("a exists")
} else {
print("a does not exist")
}
对于某些人来说,tidyverse 方法可能更具可读性,因此更容易记住。
您将搜索str_detect
返回逻辑向量(如)的变量grepl
,然后通过基本 R 函数any
将其折叠,如果至少有一个 TRUE 值,则返回 TRUE。
dat %>% names %>% str_detect("d") %>% any()