2011-11-02 17 views
9

Chciałbym wprowadzić ramkę danych do wklejki i chciałbym wkleić ją tak, jakbym osobno wprowadził kolumny tej ramki danych. Powodem, dla którego chciałbym to zrobić, jest to, że nie jestem pewien, ile kolumn będzie mieć moja ramka danych. Tutaj ma 2, ale chciałbym ogólne rozwiązanie do czynienia z dowolną liczbą kolumn.metoda wklejania dla ramki danych

Moje pożądane wyjście to test1paste w poniższym kodzie. Ale nie chciałbym wyraźnie odnosić się do kolumn. My apply próbuje się oczywiście zawieść, ponieważ działa pojedynczo na kolumnach, ale myślę, że przechodzi przez rozwiązanie, którego szukam.

> test1 <- 
+ structure(c(42.71, 41.69, 46.95, 48.85, 45.26, 44.71, 43.71, 
+ 42.69, 47.95, 49.85, 46.26, 45.71), .Dim = c(6L, 2L)) 
> 
> test1paste <- paste(test1[,1],test1[,2], sep = "&") 
> test1paste 
[1] "42.71&43.71" "41.69&42.69" "46.95&47.95" "48.85&49.85" "45.26&46.26" 
[6] "44.71&45.71" 
> 
> apply(test1,MARGIN=2,paste,sep="&") 
    [,1] [,2] 
[1,] "42.71" "43.71" 
[2,] "41.69" "42.69" 
[3,] "46.95" "47.95" 
[4,] "48.85" "49.85" 
[5,] "45.26" "46.26" 
[6,] "44.71" "45.71" 

Wszelkie pomysły?

Dzięki!

+0

Czy ma to coś wspólnego z LaTeX? –

+0

@Roman Tak, zgadliście! Nie używam 'xtable', ponieważ chcę, aby standardowe błędy były pod szacunkami w nawiasach. –

+0

Czytasz mnie jak otwartą książkę. :) –

Odpowiedz

7

Jak o tym:

> apply(test1,1,paste,collapse="&") 
[1] "42.71&43.71" "41.69&42.69" "46.95&47.95" "48.85&49.85" "45.26&46.26" 
[6] "44.71&45.71" 
+0

dzięki, właśnie tego potrzebuję. –

8

Jeśli "dataframe" jest w rzeczywistości data.frame (a nie matrix jak w przykładzie), można użyć do.call bezpośrednio:

testdf <- as.data.frame(test1) 
do.call(paste, c(testdf, sep="&")) 

polega ta na fakt, że data.frame jest gloryfikowany list, a do.call pobiera listę argumentów. Właśnie dołączam argument sep do listy ...

Małe zastrzeżenie: jeśli jakakolwiek nazwa kolumny to "sep" lub "zwiń", możesz mieć kłopoty. Usunięcie nazw kolumn pomogłoby w takim przypadku:

do.call(paste, c(unname(testdf), sep="&")) 
+0

dziękuję! Muszę się nauczyć "do.call", ponieważ wydaje się to niezwykle przydatne. I przepraszam, że wykorzystałem matrycę jako przykład, nie będąc jednoznacznym tym, który mnie interesował. Dzięki za twoje staranne rozwiązanie. –

Powiązane problemy