使用rownames将数据转换为colnames r

时间:2017-07-24 13:56:49

标签: r

我有以下数据集

structure(list(Year = c("Oranges", "Cherrys", "Apples", "Bananas"
), `42461` = c(0, NA, 12, NA), `42491` = c(1, 12, NA, NA), `42522` = c(1, 
12, 7, NA), `42552` = c(NA, 12, 6, NA), `42583` = c(2, NA, 8, 
NA), `42614` = c(NA, 12, 5, NA), `42644` = c(NA, NA, 4, NA), 
    `42675` = c(NA, 12, NA, NA), `42705` = c(NA, 3, NA, NA), 
    `42736` = c(NA, NA, 12, NA), `42767` = c(NA, NA, 12, NA), 
    `42795` = c(NA, 12, NA, NA), Total = c(0, 0, 0, 0)), .Names = c("Year", 
"42461", "42491", "42522", "42552", "42583", "42614", "42644", 
"42675", "42705", "42736", "42767", "42795", "Total"), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -4L))

我想把它改为: 类别值年

我尝试了以下内容:

datdat %>% gather(Cat,Var) 

但问题是年份是每列的名称。

1 个答案:

答案 0 :(得分:1)

我删除了“Totals”栏目,我不确定这是否是您所要求的:

library (data.table)
dat = data.table (structure(list(Year = c("Oranges", "Cherrys", "Apples", 
"Bananas"
), `42461` = c(0, NA, 12, NA), `42491` = c(1, 12, NA, NA), `42522` = c(1, 
12, 7, NA), `42552` = c(NA, 12, 6, NA), `42583` = c(2, NA, 8, 
NA), `42614` = c(NA, 12, 5, NA), `42644` = c(NA, NA, 4, NA), 
`42675` = c(NA, 12, NA, NA), `42705` = c(NA, 3, NA, NA), 
`42736` = c(NA, NA, 12, NA), `42767` = c(NA, NA, 12, NA), 
`42795` = c(NA, 12, NA, NA), Total = c(0, 0, 0, 0)), .Names = c("Year", 
"42461", "42491", "42522", "42552", "42583", "42614", "42644", 
"42675", "42705", "42736", "42767", "42795", "Total"), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -4L)))

names (dat)[1] = "Category"
dat [, "Total" := NULL]
melt.dat = melt (dat, id.vars = c("Category"), variable.name = "Year")

melt.dat给你:

> head (melt.dat)
   Category  Year value
1:  Oranges 42461     0
2:  Cherrys 42461    NA
3:   Apples 42461    12
4:  Bananas 42461    NA
5:  Oranges 42491     1
6:  Cherrys 42491    12

另请注意,该表是data.table,而不是data.frame :) 忘了提一下,如果还没有,请运行install.packages(“data.table”)