R:データから2値が入っている列名を得る

与えられたデータを2つのグループに分けるとき、2値の列を使ったりします。
ただ、列が多いときは、どの列が2値か得られると楽なので、その場合のメモです。

元データ

丁度良いサンプルデータが見つからなかったので、iris へテスト用に NA を含む2値の列を追加しました。

  • Sepal.Length.bool
    TRUE または FALSE または NA
  • Petal.Width.ab
    “A” または “B” または NA
library(dplyr)

data <- iris %>%
  mutate(
    Sepal.Length.bool = ifelse(Sepal.Length > 7, NA, trunc(Sepal.Length) %% 2 == 0),
    Petal.Width.ab = ifelse(Petal.Width > 2, NA, ifelse(trunc(Petal.Width) %% 2 == 0, "A", "B"))
  )

結果はこんな感じ。

data %>% tail(10)

2値の列を得る

cols <- colnames(data)
twoGroupCols <- cols[which(sapply(cols, function(col) {
  data[[col]] %>%
    na.omit() %>%
    unique() %>%
    length() == 2
}))]

で、2値の列が得られます。

コメント