2013-01-14 57 views
0

我有一些問題了解row.names是什麼以及它是如何工作的。而且,我怎樣才能讓我的數據做row.names允許你做的事情。R:row.names和數據操作/ export

例如,我使用下面的代碼(我的數據)創建了一些集羣。我想要導出sapply行的結果,但僅限於現在的屏幕。我的數據框的第一列(path_country)是國家名稱,其他列是其他變量(整數)。我沒有看到一種簡單的方法將這些羣集導出到一張表或一組國家及其羣組成員身份。

我試圖在R中使用示例數據集做一個虛擬示例。例如,mtcars,那時我注意到第一列標記爲row.names。用mtcars我可以創建集羣,cutree到指定的組數,然後保存爲數據框。通過這種方法,我在第一列中有'汽車名稱',在第二列中有組號碼(或多或少,可以清理得更好看,但基本上是我所追求的),這就是我想要的與我的數據發生。

任何想法,將不勝感激。

# my data 
path_country <- read.csv("C:/path_country.csv") 
patho <- subset(path_country, select=c(2:188)) 
patho.d <- dist(patho) 

patho.hclust <- hclust(patho.d) 
patho.hclust.groups11 = cutree(patho.hclust,11) 
sapply(unique(patho.hclust.groups11),function(g)path_country$Country[patho.hclust.groups11 == g]) 

# mtcars data 
car.d <- dist(mtcars) 
car.h <- hclust(car.d) 
car.h.11 <- cutree(car.h, 11) 
nice_result <- as.data.frame(car.h.11) 
write.table(nice_result, "test.txt", sep="\t") 
+1

'row.names'是數據框的字符屬性,它們需要它們並且它們是唯一的才能被認爲是正確形成的。你可以通過'attr'函數訪問它們或者修改它們,或者更加方便和安全地使用'rownames'和'rownames <-' –

回答

1

1)您可以從CSV文件與row.names創建data.frame

# Names in the first column 
path_country <- read.table("C:/path_country.csv", row.names=1) 
# Names in column "Country" 
path_country <- read.table("C:/path_country.csv", row.names="Country", head=TRUE) 

注意,在第二種情況下,你應該爲了使用列的名稱指定head=TRUE

現在rownames(path_country)應該給你帶有行名的矢量,並且as.data.frame(patho.hclust.groups11)好的結果導出。

2)在任何時間,你可以爲你的data.frame使用命令行指定的名字:

rownames(path_country) <- names.vector 

其中names.vector是長度data.frame等於行數的唯一名稱的向量。在你的例子中:

rownames(patho.hclust.groups11) <- path_country$Country 

注意,如果你使用第一種方法,你不需要這個命令。