2014-10-01 9 views
26

Próbuję stworzyć fabułę z elementami pliku csv, który wygląda tak:argumenty implikują różnej liczby rzędów: 8, 20

h1,h2,h3,h4 
a,1,0,1,0 
b,1,1,0,1 
c,0,0,1,0 

Próbowałem poniższy kod, ale otrzymuję błąd mówiąc

Error in data.frame(id = varieties, attr(mat, "row.names"), check.rows = FALSE) : 
    arguments imply differing number of rows: 8, 20 

Moje przykładowe dane mają 8 kolumn i 20 wierszy (z wyłączeniem nazw nagłówków i wierszy). Próbowałem wyszukać online i próbowałem zaimplementować kilka poprawek, ale problem nadal występuje. Naprawdę doceniam każdą pomoc.

mat <- read.csv("trial.csv", header=T, row.names=1) 
varieties = names(mat) 
df <- data.frame(id=varieties,attr(mat, "row.names"), check.rows= FALSE) 
+0

Która linia zgłasza błąd? Czy możesz uruchomić skrypt wiersz po wierszu i zgłosić wyniki? Czy można udostępnić plik? –

+0

@MylesBaker 'df <- data.frame (id = odmiany, attr (mat, "row.names"), check.rows = FALSE) "podaje błąd. – abn

+1

To będzie działać tylko wtedy, gdy 'mat' jest macierzą kwadratową (nrows = ncols). Co chcesz osiągnąć? Może 'list' jest lepiej dopasowany do twoich potrzeb ... Lub zobacz' cbind.fill' [tutaj] (http://stackoverflow.com/questions/7962267/cbind-a-df-with-an-empty-df -cbind-fill) – EDi

Odpowiedz

23

Twój data.frame mat jest prostokątna (n_rows! = N_cols).

Dlatego nie można wykonać data.frame z kolumn i rownames, ponieważ każda kolumna w data.frame musi mieć tę samą długość.

Może to wystarczy do Twoich potrzeb:

require(reshape2) 
mat$id <- rownames(mat) 
melt(mat) 
6

miałem ten sam komunikat o błędzie, więc poszedłem googlowania trochę udało mi się go naprawić za pomocą następującego kodu.

df<-data.frame(words = unlist(words)) 

wyrazy to lista znaków.

To na wypadek, gdyby ktoś inny potrzebował wyjścia jako ramki danych.