R 将行转换为单个列
大家好。我有一个和我提到的相似的数据。每个组现在都是一个单独的列。我想在groups的名称下打开一个新列,并将年份放入行中。我的意思是: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
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))