R 减少宽格式数据中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

我有两个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 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