str(data)
を使用して、レベルのhead
を取得します(1-2値)
_fac1: Factor w/ 2 levels ... :
fac2: Factor w/ 5 levels ... :
fac3: Factor w/ 20 levels ... :
val: num ...
_
with dplyr::glimpse(data)
より多くの値を取得しますが、因子レベルの数/値に関する情報はありません。 data.frame内のすべての因子変数のすべてのレベル情報を自動的に取得する方法はありますか?詳細情報のある短いフォーム
_levels(data$fac1)
levels(data$fac2)
levels(data$fac3)
_
より正確には、次のようなエレガントなバージョン
_for (n in names(data))
if (is.factor(data[[n]])) {
print(n)
print(levels(data[[n]]))
}
_
クリストフ
いくつかのオプションがあります。 sapply
を使用して 'data'をループし、各列のlevels
を取得します(すべての列がfactor
クラスであると仮定)
sapply(data, levels)
または、パイプする必要がある場合(%>%
)それ、これは次のように行うことができます
library(dplyr)
data %>%
sapply(levels)
または、別のオプションはsummarise_each
from dplyr
from levels
内のfuns
を指定します。
data %>%
summarise_each(funs(list(levels(.))))
より簡単な方法は、sqldfパッケージを使用して、select distinctステートメントを使用することです。これにより、因子レベルの名前を自動的に取得し、他の列/変数にレベルとして指定することが容易になります。
汎用コードスニペットは次のとおりです。
library(sqldf)
array_name = sqldf("select DISTINCT *colname1* as '*column_title*' from *table_name*")
アイリスデータセットを使用したサンプルコード:
df1 = iris
factor1 <- sqldf("select distinct Species as 'flower_type' from df1")
factor1 ## to print the names of factors
出力:
flower_type
1 setosa
2 versicolor
3 virginica
あなたの問題が特に因子のすべてのレベルのリストを出力することである場合、私はを使用して簡単な解決策を見つけました:
一意(df $ x)
たとえば、悪名高い虹彩データセットの場合:
unique(iris $ Species)
またはpurrrを使用:
data %>% purrr:map(levels)
または、最初にすべてを因数分解する:
data %>% dplyr::mutate_all(as.factor) %>% purrr:map(levels)
そして、長さを取得する方法についての質問に答えます:
data %>% map(levels) %>% map(length)