2013-02-06 33 views
1

我將一個數據幀拆分爲XYX有一列,Y有大約100將列拆分爲字符和數字R

x <- subset(tbl, , select = ordernum) 
y <- subset(tbl, select = -c(ordernum, paid1num, 
      weight, returnnum, order_only, multi_dep, sequence_id)) 

接着我與每個產生與100 columnsa single row一個frameY相關X

corr <- cor(x,y) 

接着我轉,

corr.t <- t(corr) 

和(截短的)結果如下:

        ordernum 
HH_AFFORD_MOMS_BUY_GREEN  -0.0021281583 
HH_AFFORD_SPORTS    -0.0047221159 
HH_AFFORD_CLASSICAL_MUSIC  -0.0006594956 
HH_AFFORD_HOME_DECOR   0.0052106766 

我想拆分此單個列,叫做ordernum,成2列。帶有變量名稱的character字段以及帶有相關性的numeric

我很欣賞任何指導。也許如果我使用lm而不是cor

回答

5

您已存儲作爲corr.t輸出是matrix,而「變量名」你提到的使用rownames()矩陣的名,訪問。

爲了讓您所需的輸出,你可以做:

data.frame(id = rownames(corr.t), val = c(t(corr.t))) 

一個更通用的解決方案 - 適用時你的矩陣不僅僅是一列多 - 將是:

data.frame(ID = rownames(your-matrix), 
      as.data.frame(your-matrix, 
         row.names = 1:nrow(your-matrix))) 

最後一行row.names = 1:nrow(your-matrix)從輸出中刪除行名;它們不再需要,因爲它們現在是數據框架的一部分。


對於什麼是值得的,你並不需要專門轉換你的數據來獲得你想要的輸出。下面是可用有R數據集的一個例子演示你想達到什麼目的:

(mycor <- cor(swiss[, 1], swiss[, 2:5])) 
#  Agriculture Examination Education Catholic 
# [1,] 0.3530792 -0.6458827 -0.6637889 0.4636847 

# Now, make it into a data.frame 
data.frame(id = colnames(mycor), val = as.vector(mycor)) 
#   id  val 
# 1 Agriculture 0.3530792 
# 2 Examination -0.6458827 
# 3 Education -0.6637889 
# 4 Catholic 0.4636847 
+0

我很想編輯只是爲了增加更多的解釋比「只管去做」 ... – A5C1D2H2I1M1N2O1R2T1

+0

請隨時編輯! – Arun

+0

我想我已經過分了。也許是時候我叫它一個晚上了:) – A5C1D2H2I1M1N2O1R2T1