R 将行转换为单个列

R 将行转换为单个列,r,dataframe,rows,tidyr,data-manipulation,R,Dataframe,Rows,Tidyr,Data Manipulation,大家好。我有一个和我提到的相似的数据。每个组现在都是一个单独的列。我想在groups的名称下打开一个新列,并将年份放入行中。我的意思是: year Pink Floyd Metallica Rammstein Led Zeppelin Pantera 2004 600 700 500 400 300 2005 700 300 400 200 500 2006 300

大家好。我有一个和我提到的相似的数据。每个组现在都是一个单独的列。我想在groups的名称下打开一个新列,并将年份放入行中。我的意思是:

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

在我16年的原始数据中,有77个城市,而不是乐队。所以我的真实数据中有78个变量,77个不同的城市和一年。因此,我可以说我正在处理大量的数据。所以,我需要你的帮助。

你可以转置数据帧,然后更改名称。大概是这样的:

Bands       2004  2005  2006
Pink Floyd  600   700   300
Metallica   700   300   150
Rammstein
我们可以使用和从包装中取出


这是一个使用
转置的
数据表
选项

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
数据

> 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

此链接可能会有所帮助:?当我尝试下面建议的方法时,我非常高兴,但当我尝试获取$Metallica数据时,I get null:df.aree如果您包含数据的一个子集,以便测试和验证特定于数据集的解决方案,可能会有所帮助。使用
dput(您的数据帧)
dput(head(您的数据帧))
将数据粘贴到问题中。也许这能帮上忙谢谢!但当我试图从f.e.Rammstein行(如df$Rammstein)获取数据时,会出现一个错误,如:未知或未初始化列。有什么问题吗?如果您想从Ramstein行获取数据,您需要对数据进行子集:
subset(data,band==“Ramstein”)
非常感谢!但正如我上面提到的,我无法获得像df_aux$Metallica这样的数据。原因是什么?你不能用$访问一行,你要访问列时使用$。在这种情况下,列是Band,2004,2005和2006。
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
> 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
> 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))