year  Pink Floyd Metallica Rammstein Led Zeppelin Pantera     
2004  600        700        500        400        300
2005  700        300        400        200        500
2006  300        150        600        700        700

Halo untuk semua orang. Saya memiliki data yang sama seperti yang saya sebutkan. Masing-masing grup sekarang menjadi kolom terpisah. Saya ingin membuka kolom baru dengan nama grup dan memasukkan tahun ke dalam baris. Maksudku:

Bands       2004  2005  2006
Pink Floyd  600   700   300
Metallica   700   300   150
Rammstein

Alih-alih band, ada 77 kota di data asli saya dan 16 tahun. Jadi saya memiliki 78 variabel dalam data saya yang sebenarnya, 77 kota yang berbeda dan satu tahun. Oleh karena itu, saya dapat mengatakan bahwa saya berurusan dengan sejumlah besar data. Jadi, saya butuh bantuan Anda.

1
Ilayda Velioglu 5 Januari 2021, 22:53

3 jawaban

Jawaban Terbaik

Kita dapat menggunakan pivot_longer dan pivot_wider dari rel tidyr.

library(tidyverse)
df %>%
    pivot_longer(cols = -year, names_to = "band") %>%
    pivot_wider(names_from = year, values_from = value)

#   band       `2004` `2005` `2006`
# 1 PinkFloyd     600    700    300
# 2 Metallica     700    300    150
# 3 Rammstein     500    400    600
# 4 LedZepelin    400    200    700
# 5 Pantera       300    500    700
1
bouncyball 5 Januari 2021, 22:33

Berikut adalah opsi data.table menggunakan transpose

> data.table::transpose(setDT(df), keep.names = "Band", make.names = "year")
           Band 2004 2005 2006
1:   Pink Floyd  600  700  300
2:    Metallica  700  300  150
3:    Rammstein  500  400  600
4: Led Zeppelin  400  200  700
5:      Pantera  300  500  700

Data

> dput(df)
structure(list(year = 2004:2006, `Pink Floyd` = c(600L, 700L, 
300L), Metallica = c(700L, 300L, 150L), Rammstein = c(500L, 400L,
600L), `Led Zeppelin` = c(400L, 200L, 700L), Pantera = c(300L,
500L, 700L)), class = c("data.table", "data.frame"), row.names = c(NA,
-3L))
1
ThomasIsCoding 5 Januari 2021, 22:27

Anda dapat melakukan transpose data frame kemudian mengganti nama. Sesuatu seperti ini:

library(tidyr)
# Let be df your dataframe
df <- data.frame(year = c(2005,2005,2006), PinkFloyd = c(600, 700, 300), Metallica = 
c(700,300,150),  Ramstein =c(500,400,600), LedZepelin =c(400,200,700), Pantera=c(300,500,700) ) 

#Transpose data and change names
df_aux <- data.frame(t(df))
colnames(df_aux ) <- unique(df$year)
df_aux <- df_aux[-1,]
df_aux <- tibble::rownames_to_column(df_aux, "Band")

Hasilnya adalah:

> df_aux 
 Band        2005 2004 2006
 PinkFloyd   600  700  300
 Metallica   700  300  150
 Ramstein    500  400  600
 LedZepelin  400  200  700
 Pantera     300  500  700
0
Juan Camilo Rivera Palacio 5 Januari 2021, 22:05