我有一个名为“abcframe”的data.frame
a b c
1 1 1
2 2 3
如何在给定数据框中查找列是否存在? 例如,我想知道data.frame abcframe 中是否存在列d 。
答案 0 :(得分:155)
假设您的数据框名称为dat
,并且您要检查的列名是"d"
,则可以使用%in%
运算符:
if("d" %in% colnames(dat))
{
cat("Yep, it's in there!\n");
}
答案 1 :(得分:22)
您有多种选择,包括使用%in%
和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
答案 2 :(得分:5)
您可以使用any
:
> names(dat)
[1] "a" "b" "c"
> any(names(dat) == 'b')
[1] TRUE
> any(names(dat) == 'B')
[1] FALSE
答案 3 :(得分:1)
您还可以使用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")
}
答案 4 :(得分:0)
tidyverse 方法对某些人来说可能更易读,因此更容易记住。
您可以通过 str_detect
搜索变量,它返回一个逻辑向量,如 grepl
,然后通过基本 R 函数 any
折叠它,如果至少有一个,则返回 TRUE真值。
dat %>% names %>% str_detect("d") %>% any()