15

数値変数と因子変数の両方を持つ「保険」という名前のデータ フレームがあります。カテゴリ変数のレベルを確認できるように、すべての因子変数を選択するにはどうすればよいですか?

sapply(insurance,class)すべての変数のクラスを取得しようとしました。class(var)="factor"しかし、変数名も の結果に含まれているため、if に基づいて論理的な引数を作成することはできませんsapply()

ありがとう、

4

5 に答える 5

19

いくつかのデータ:

insurance <- data.frame(
  int   = 1:5,
  fact1 = letters[1:5],
  fact2 = factor(1:5),
  fact3 = LETTERS[3:7]
)

私はsapplyあなたがしたように使用しますが、と組み合わせてis.factor論理ベクトルを返します:

is.fact <- sapply(insurance, is.factor)
#   int fact1 fact2 fact3 
# FALSE  TRUE  TRUE  TRUE

次に[、これらの列を抽出するために使用します。

factors.df <- insurance[, is.fact]
#   fact1 fact2 fact3
# 1     a     1     C
# 2     b     2     D
# 3     c     3     E
# 4     d     4     F
# 5     e     5     G

最後に、レベルを取得するには、次を使用しますlapply

lapply(factors.df, levels)
# $fact1
# [1] "a" "b" "c" "d" "e"
# 
# $fact2
# [1] "1" "2" "3" "4" "5"
# 
# $fact3
# [1] "C" "D" "E" "F" "G"

str(insurance)短い要約としても興味深いかもしれません。

于 2013-07-28T12:09:21.863 に答える
-3

flodel のデータ フレーム「保険」を使用してすべての要素を一度に取得するには、次applyのようにを使用できます。

apply(insurance,2,factor)

     int fact1 fact2 fact3
[1,] "1" "a"   "1"   "C"  
[2,] "2" "b"   "2"   "D"  
[3,] "3" "c"   "3"   "E"  
[4,] "4" "d"   "4"   "F"  
[5,] "5" "e"   "5"   "G"  

1 つの因子のレベルのみに関心がある場合は、次のことができます。

factor(insurance$fact1)

[1] a b c d e
Levels: a b c d e
于 2013-07-28T13:53:00.097 に答える