2016-09-22 47 views
0

我正在嘗試向數據框添加彙總行,詳細說明每列的級別。我遇到了一個問題,在整個框架中應用關卡功能。我想原因是,單獨處理列的係數向量處理,但在使用的應用功能,他們被視爲字符:爲什麼在應用子集時數據框中的列會改變類?

a = c("a","b","c") 
b = c("d","e","f") 
m = cbind(a,b) 
df = as.data.frame(m) 
class(df[,1]) 
[1] "factor" 
apply(df, MARGIN=2, class) 
      a   b 
"character" "character" 

我認爲這是問題的原因:

levels(df[,1]) 
[1] "a" "b" "c" 
apply(df, MARGIN=2, levels) 
NULL 

我查看了有關應用程序,數據框和網絡的幫助文檔。有人可以解釋爲什麼這是嗎?

+0

這是因爲'apply'強求你data.frame到'matrix'而那些只能有一個類中的所有「列」(因爲他們是隻是一個具有維度屬性的向量) –

+1

並從'?matrix':'as.matrix'的默認方法調用'as.vector(x)',因此例如強制要素向量。 –

+0

應用第一次檢查以查看所有數據是否爲數字。如果它是調用'as.matrix'。如果不是,則調用'as.array'。然而,'as.array'然後調用'as.vector'進行@WeihuangWong表示的轉換。 –

回答

0

您可以使用lapply或sapply函數來了解您的變量類,根據我的理解,通過列元素明智地應用所以每個元素都是一個字符,因此輸出顯示爲字符,其中lapply和sapply函數用於變量所以它給人類的變量或是其作爲字符或因素

lapply(df,class) 
$a 
[1] "factor" 

$b 
[1] "factor" 

sapply(df,class) 
     a  b 
"factor" "factor" 
相關問題