2

これはセットアップです:

mydf<-structure(list(weight = c(1.34288799762726, 1.18884372711182, 
1.15979790687561, 1.34288799762726, 1.08285343647003, 1.07932889461517, 
1.28913342952728, 1.211909532547, 1.03438591957092, 1.22719633579254
), RespID = c(3182, 3183, 3184, 3185, 3186, 3187, 3188, 3189, 
3190, 3191), b1 = structure(c(1L, 2L, 1L, 1L, 2L, 2L, 1L, 2L, 
2L, 2L), .Label = c("Mand", "Kvinde"), class = "factor")), .Names = c("weight", 
"RespID", "b1"), row.names = c(NA, 10L), class = "data.frame")

summary を呼び出すと、次の出力が生成されます。

summary(mydf)
#     weight          RespID          b1   
# Min.   :1.034   Min.   :3182   Mand  :4  
# 1st Qu.:1.102   1st Qu.:3184   Kvinde:6  
# Median :1.200   Median :3186             
# Mean   :1.196   Mean   :3186             
# 3rd Qu.:1.274   3rd Qu.:3189             
# Max.   :1.343   Max.   :3191            

一方、適用すると別の結果が得られます。

apply(mydf, 2, class)
#     weight      RespID          b1 
#"character" "character" "character" 

したがって、私のdata.frameの各列を適用すると、クラス「文字」が間違っていることがわかっています。要約はそれを正しくします。

4

3 に答える 3

5

これが発生する理由applyは、行列

> as.matrix(mydf)
   weight     RespID b1      
1  "1.342888" "3182" "Mand"  
2  "1.188844" "3183" "Kvinde"
3  "1.159798" "3184" "Mand"  
4  "1.342888" "3185" "Mand"  
5  "1.082853" "3186" "Kvinde"
6  "1.079329" "3187" "Kvinde"
7  "1.289133" "3188" "Mand"  
8  "1.211910" "3189" "Kvinde"
9  "1.034386" "3190" "Kvinde"
10 "1.227196" "3191" "Kvinde"

あなたが使いたいのはsapply

> sapply(mydf,class)
   weight    RespID        b1 
"numeric" "numeric"  "factor" 
于 2013-08-02T13:20:05.597 に答える
0

理由がわかりました。

apply が data.frame を行列に強制し、すべての列が文字型として格納されるようです。もちろん、apply メソッドは変換後にクラスを報告します。

lapply(mydf, class)
# $weight
# [1] "numeric"
# 
# $RespID 
# [1] "numeric"
# 
# $b1
# [1] "factor"

正しい答えを与えます。

于 2013-08-02T13:20:29.410 に答える