列がデータフレームに存在するかどうかを確認するには


110

「abcframe」という名前のdata.frameがあります。

     a  b  c
     1  1  1
     2  2  3

特定のデータフレームに列が存在するかどうかをどのように確認できますか?たとえば、列dがdata.frame abcframeに存在するかどうかを確認したいとします。


1
データフレームにの名前の列があるかどうかd、または特定のベクトルdがデータフレームの列の1つと等しいかどうかを知りたいですか?

データフレームにdという名前のクロームがあるかどうかを知りたい
サニーサニー

100票で素敵な晴れの日を!:-)
TMS

回答:


196

データフレームのdat名前がであり、チェックする列名がであると仮定すると"d"%in%演算子を使用できます。

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

6
あなたが逆を探している場合は、列がない場合、すなわち、単に追加!初めに:if(!"d"%in% colnames(dat))
toto_tico

素晴らしい答え。列「d」、「e」、「f」を検索する場合、これをどのように拡張できますか?それは次のようになりますif("d" & "e" & "f" %in% colnames(dat)) { cat("Yep, it's in there!\n"); }。ありがとう!-ああ、私は自分で答えを見つけた可能性があります:stackoverflow.com/questions/21770912/…
Sander W. van der Laan

6
全て(C( "D"、 "E"、 "F")%で%COLNAMES(DAT))
SKAN

24

%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

11
取得するにはgrepl、Aビットより正確な、あなたが使用することができgrepl("^d$",names(dat))た名前の列があることを確認するために、dd戻りませんTRUE
BenBarnes 2012

このおかげで、colnamesうまくいきませんでしnamesた。
Docconcoct 2017

@Andrieは、列を2つの大きなデータフレームと比較して、他の列から欠落している列名を確認する方法はありますか?
sar

8

あなたが使うことができますany

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

2

がに存在するif(!is.null(abcframe$d))かどうかをテストするためにも使用できます。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
興味深いことに、 'dat $ d'が警告をスローするため、これは整然としたティブルで失敗します。
Miratrix
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.