R 减少宽格式数据中ID变量数量的规范方法
我有两个ID变量组织的数据,R 减少宽格式数据中ID变量数量的规范方法,r,data.table,reshape,reshape2,R,Data.table,Reshape,Reshape2,我有两个ID变量组织的数据,年份和国家,如下所示: Year Country VarA VarB 2015 USA 1 3 2016 USA 2 2 2014 Canada 0 10 2015 Canada 6 5 2016 Canada 7 8 我希望将Year保留为ID变量,但是为VarA和VarB创建多个列,每个Country的值对应一个列(我不挑剔列顺序),以生成下表: Year VarA.Canada V
年份
和国家
,如下所示:
Year Country VarA VarB
2015 USA 1 3
2016 USA 2 2
2014 Canada 0 10
2015 Canada 6 5
2016 Canada 7 8
我希望将Year
保留为ID变量,但是为VarA
和VarB
创建多个列,每个Country
的值对应一个列(我不挑剔列顺序),以生成下表:
Year VarA.Canada VarA.USA VarB.Canada VarB.USA
2014 0 NA 10 NA
2015 6 1 5 3
2016 7 2 8 2
我通过以下代码实现了这一点:
require(data.table)
require(reshape2)
data <- as.data.table(read.table(header=TRUE, text='Year Country VarA VarB
2015 USA 1 3
2016 USA 2 2
2014 Canada 0 10
2015 Canada 6 5
2016 Canada 7 8'))
molten <- melt(data, id.vars=c('Year', 'Country'))
molten[,variable:=paste(variable, Country, sep='.')]
recast <- dcast(molten, Year ~ variable)
require(data.table)
要求(2)
数据使用dcast
可以一次投射多个value.var
s(从data.table
v1.9.6上)。尝试:
使用dcast
可以一次转换多个value.var
s(从data.table
v1.9.6上)。尝试:
我尝试了此操作并得到以下警告:Error in.subset2(x,I,exact=exact):下标超出范围另外:警告消息:in if(!(value.var%in%names(data))){:条件的长度大于1,只使用第一个元素
@ConnorHarris确保您的数据
是数据。表
。使用setDT(数据)尝试
还要确保您的数据.table
包版本已解决>1.9.6!问题不在于数据不是数据.table
,而是重塑2
导入屏蔽了数据.table
版本的dcast
本身。删除需要(重塑2)
修复了此问题。我的数据。顺便说一句,table
版本是1.10.4
。很好,如果您想同时加载这两个版本,您也可以这样做:数据。table::dcast(…)
我尝试了此操作,并得到以下警告:在.subset2(x,I,exact=exact)中出错:下标超出边界另外:警告消息:在if(!(value.var%in%names(data)){:该条件的长度大于1,并且只使用第一个元素
@ConnorHarris确保您的数据
是数据。表
。使用setDT(data)进行尝试
还要确保您的数据.table
包版本已解决>1.9.6!问题不在于数据不是数据.table
,而是重塑2
导入屏蔽了数据.table
版本的dcast
本身。删除需要(重塑2)
修复了此问题。顺便提一下,我的数据。表的版本是1.10.4
。很好,如果您想同时加载这两个版本,也可以这样做:数据。表::dcast(…)
dcast(data, Year ~ Country, value.var = c("VarA","VarB"), sep = ".")
# Year VarA.Canada VarA.USA VarB.Canada VarB.USA
#1: 2014 0 NA 10 NA
#2: 2015 6 1 5 3
#3: 2016 7 2 8 2