/ / Jak zmienić kształt pliku tekstowego? - r, ramka danych, zmień kształt

Jak zmienić kształt pliku tekstowego? - r, ramka danych, zmiana kształtu

Mam taki plik, który chcę zmienić i przekształcić w kolumny:

   fe=read.table("foo.txt")
> fe
V1
1         9
2        Sd
3          2
4       Sd
5          5
6       Smn
7          7
8        Smn
9          5
10      bf
11         4
12      bf

> str(fe)
"data.frame":   12 obs. of  1 variable:
$ V1: Factor

Pożądane wyjście:

 Sd 9 2
Smn 5 7
bf 5 4

Odpowiedzi:

3 dla odpowiedzi № 1

Inna opcja:

# step 1: create new dataframe
fe2 <- data.frame(id = fe$V1[c(FALSE,TRUE)],
num = as.numeric(as.character(fe$V1[c(TRUE,FALSE)])))

# step 2: reshape into the desired format
fe2$rid <- with(fe2, ave(as.character(id), id, FUN = seq_along))
reshape(fe2, idvar = "id", timevar = "rid", direction = "wide")

która zwraca data.frame:

   id num.1 num.2
1  Sd     9     2
3 Smn     5     7
5  bf     5     4

Jako alternatywę dla kroku 2 można również użyć data.table-pakiet:

# step 2 (alternative): reshape into the desired format
library(data.table) # v1.9.8 or higher is required for the "rowid"-function
dcast(setDT(fe2), id ~ rowid(id, prefix = "num."), value.var = "num")

To zwróci a Tabela danych (który jest ulepszony ramka danych) o takiej samej strukturze jak rozwiązanie podstawowe R.


2 dla odpowiedzi nr 2

Zmieniamy kształt kolumny „V1”, konwertując ją na a matrix a następnie do data.frame, następnie unstack i przetransponować, aby uzyskać oczekiwaną wydajność

d1 <- as.data.frame(matrix(fe$V1, ncol=2, byrow = TRUE))
d1$V1 <- as.integer(as.character(d1$V1))
res <- t(unstack(d1, V1~V2))
res
#    [,1] [,2]
#bf     5    4
#Sd     9    2
#Smn    5    7