Veri çerçevesinde bir sütunun var olup olmadığını bulmak için


110

"Abcframe" adında bir data.frame var

     a  b  c
     1  1  1
     2  2  3

Belirli bir veri çerçevesinde bir sütunun olup olmadığını nasıl bulabilirim? Örneğin, bir olmadığını bulmak istiyoruz sütun D data.frame var abcframe .


1
Veri çerçevenizin adlı bir sütuna sahip dolup olmadığını bilmek ister misiniz, yoksa belirli bir vektörün dveri çerçevenizin sütunlarından birine eşit olup olmadığını bilmek ister misiniz ?

dataframe'in d adında bir bulutlu olup olmadığını öğrenmek istiyorum
Sunny Sunny

100 oyla güzel güneşli günler dilerim! :-)
TMS

Yanıtlar:


196

Veri çerçevenizin datadının ve kontrol edilecek sütun adınızın olduğunu varsayarsak "d", %in%operatörü kullanabilirsiniz :

if("d" %in% colnames(dat))
{
  cat("Yep, it's in there!\n");
}

6
tersine bakıyorsanız, yani sütun orada değilse, sadece !if(!"d"%in% colnames(dat))
başa

Harika cevap. 'D' ve 'e' ve 'f' sütunlarını arıyor olsaydım bunu nasıl uzatabilirim? O olurdu: if("d" & "e" & "f" %in% colnames(dat)) { cat("Yep, it's in there!\n"); }. Teşekkürler! - Oh, cevabı kendim bulmuş olabilirim: stackoverflow.com/questions/21770912/… .
Sander W. van der Laan

6
all (c ("d", "e", "f")% in% colnames (dat))
skan

24

Sen kullanarak dahil seçenekleri, bir dizi var %in%ve 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

Sütunların adlarını almak için:

names(dat)
[1] "a" "b" "c"

%in%Üyeliği kontrol etmek için kullanın :

"d" %in% names(dat)
[1] FALSE

Or use `grepl` to check for a match:

grepl("d", names(dat))
[1] FALSE FALSE FALSE

11
Almak için grepldaha kesin bir bit şunu kullanabilirsiniz grepl("^d$",names(dat))adıyla bir sütun sağlamak için, dddönmez TRUE.
BenBarnes

Bunun için teşekkürler, colnamesbenim için işe yaramadı ama işe namesyaradı.
Docconcoct

@Andrie, diğer sütunda hangi sütun adlarının eksik olduğunu görmek için sütunları iki büyük veri çerçevesiyle karşılaştırmanın bir yolu var mı?
sar

8

Şunları kullanabilirsiniz any:

> names(dat)
[1] "a" "b" "c"
> any(names(dat) == 'b')
[1] TRUE
> any(names(dat) == 'B')
[1] FALSE

2

Ayrıca içinde var if(!is.null(abcframe$d))olup olmadığını test etmek için de kullanabilirsiniz .dabcframe

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")
}

2
İlginç bir şekilde bu, tidyverse tibble ile başarısız olur, çünkü 'dat $ d' bir uyarı verecektir.
miratrix
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.