R 如何旋转/取消旋转(铸造/熔化)数据帧?
我怎样才能“取消”一张桌子?什么是合适的技术术语 更新:术语称为melt 我有一个国家的数据框架和每年的数据R 如何旋转/取消旋转(铸造/熔化)数据帧?,r,pivot-table,reshape,reshape2,R,Pivot Table,Reshape,Reshape2,我怎样才能“取消”一张桌子?什么是合适的技术术语 更新:术语称为melt 我有一个国家的数据框架和每年的数据 Country 2001 2002 2003 Nigeria 1 2 3 UK 2 NA 1 我想要一些像这样的东西 Country Year Value Nigeria 2001 1 Nigeria 2002 2 Nigeria 2003 3
Country 2001 2002 2003
Nigeria 1 2 3
UK 2 NA 1
我想要一些像这样的东西
Country Year Value
Nigeria 2001 1
Nigeria 2002 2
Nigeria 2003 3
UK 2001 2
UK 2002 NA
UK 2003 1
我还是不敢相信我的回答打败了安德烈
>库(重塑)
>my.df my.result my.result[订单(my.result$Country),]
国家变量值
1尼日利亚X2001 1
3尼日利亚X2002 2
5尼日利亚X2003 3
2英国X2001 2
4英国X2002北美
6英国X2003 1
您可以使用重塑
软件包中的熔化
命令。请看这里:
可能类似于
melt(myframe,id=c('Country'))
这个问题的基本Rrestrape
方法非常难看,特别是因为名称的形式不是restrape
喜欢的。它类似于下面的内容,其中第一行setNames
将列名修改为重塑
可以使用的内容
reshape(
setNames(mydf, c("Country", paste0("val.", c(2001, 2002, 2003)))),
direction = "long", idvar = "Country", varying = 2:ncol(mydf),
sep = ".", new.row.names = seq_len(prod(dim(mydf[-1]))))
base R中更好的替代方法是使用
堆栈
,如下所示:
cbind(mydf[1], stack(mydf[-1]))
# Country values ind
# 1 Nigeria 1 2001
# 2 UK 2 2001
# 3 Nigeria 2 2002
# 4 UK NA 2002
# 5 Nigeria 3 2003
# 6 UK 1 2003
现在还提供了一些新的数据整形工具,比如“tidyr”包,它为我们提供了
gather
。当然,tidyr:::gather_uu.data.frame
方法只调用restrape2::melt
,因此我的回答的这一部分不一定添加太多内容,只是介绍了Hadleyverse中可能遇到的较新语法
library(tidyr)
gather(mydf, year, value, `2001`:`2003`) ## Note the backticks
# Country year value
# 1 Nigeria 2001 1
# 2 UK 2001 2
# 3 Nigeria 2002 2
# 4 UK 2002 NA
# 5 Nigeria 2003 3
# 6 UK 2003 1
如果您想要问题中显示的行顺序,那么这里的所有三个选项都需要对行进行重新排序
第四个选项是使用我的“splitstackshape”包中的
merged.stack
。与base R的重塑
类似,您需要将列名修改为包含“变量”和“时间”指示符的内容
library(splitstackshape)
merged.stack(
setNames(mydf, c("Country", paste0("V.", 2001:2003))),
var.stubs = "V", sep = ".")
# Country .time_1 V
# 1: Nigeria 2001 1
# 2: Nigeria 2002 2
# 3: Nigeria 2003 3
# 4: UK 2001 2
# 5: UK 2002 NA
# 6: UK 2003 1
样本数据
mydf你也打败了我。还可以尝试:check.names=FALSE
在读取时获取没有X前缀的年份,或者sub(“^X”,variable)
以后删除它们;和as.numeric(variable)
转换回数值谢谢!我猜技术术语是“融化”桌子。是吗?是的——至少这可能是R圈中最常用的术语,这要归功于神奇的重塑包(据我所知,它引入了“熔化”和“铸造”的术语)+1那么谁在使用R2.14呢?查看text=
参数到read.table
!列子集的反勾号。。。?为什么?我也只是越来越擅长dplyr。哈哈
library(splitstackshape)
merged.stack(
setNames(mydf, c("Country", paste0("V.", 2001:2003))),
var.stubs = "V", sep = ".")
# Country .time_1 V
# 1: Nigeria 2001 1
# 2: Nigeria 2002 2
# 3: Nigeria 2003 3
# 4: UK 2001 2
# 5: UK 2002 NA
# 6: UK 2003 1
mydf <- structure(list(Country = c("Nigeria", "UK"), `2001` = 1:2, `2002` = c(2L,
NA), `2003` = c(3L, 1L)), .Names = c("Country", "2001", "2002",
"2003"), row.names = 1:2, class = "data.frame")