gpt4 book ai didi

r - dcast 重命名所有变量以数字开头

转载 作者:行者123 更新时间:2023-12-01 10:47:58 26 4
gpt4 key购买 nike

所以我得到了如下所示的数据:

           id year principal interest
1: 011000600 2013 0.00 0.00
2: 011000600 2014 544.03 0.00
3: 011000700 2013 0.00 0.00
4: 011000700 2014 0.01 0.00
5: 011000800 2013 363.44 12.79
6: 011000800 2014 2005.98 0.00
7: 011000900 2013 0.00 0.00
8: 011000900 2014 0.00 0.00
9: 011001000 2013 0.00 0.00
10: 011001000 2014 0.00 0.00
11: 011001100 2013 0.00 0.00
12: 011001100 2014 1723.24 0.00
13: 011001560 2013 0.00 0.00
14: 011001560 2014 0.00 0.00
15: 011001650 2013 0.00 0.00
16: 011001650 2014 0.00 0.00

(基本上是一堆变量的纵向样本)

数据偏大,所以我使用 data.table对于一切。我 reshape 它以获得每个 id按行唯一:
datam<-melt(data,id=c("id","year"))
data1<-dcast.data.table(datam,id~...)

这产生:
          id 2013_principal 2013_interest 2014_principal 2014_interest
1: 011000600 0.00 0.00 544.03 0
2: 011000700 0.00 0.00 0.01 0
3: 011000800 363.44 12.79 2005.98 0
4: 011000900 0.00 0.00 0.00 0
5: 011001000 0.00 0.00 0.00 0
6: 011001100 0.00 0.00 1723.24 0

这当然是我想要的数据形式,但是让列名以数字开头对 keester 来说是一种痛苦。

有关如何处理此问题的任何建议?我宁愿有:
          id principal_2013 interest_2013 principal_2014 interest_2014
1: 011000600 0.00 0.00 544.03 0
2: 011000700 0.00 0.00 0.01 0
3: 011000800 363.44 12.79 2005.98 0
4: 011000900 0.00 0.00 0.00 0
5: 011001000 0.00 0.00 0.00 0
6: 011001100 0.00 0.00 1723.24 0

(将年份改为后缀)
我尝试在转换时更加明确,例如
data2<-dcast.data.table(datam,id~year+...)
data3<-dcast.data.table(datam,id~...+year)

无济于事:
data2
id 2013_principal 2013_interest 2014_principal 2014_interest
1: 011000600 0.00 0.00 544.03 0
2: 011000700 0.00 0.00 0.01 0
3: 011000800 363.44 12.79 2005.98 0
4: 011000900 0.00 0.00 0.00 0
5: 011001000 0.00 0.00 0.00 0
6: 011001100 0.00 0.00 1723.24 0

data3
id 2013_principal 2013_interest 2014_principal 2014_interest
1: 011000600 0.00 0.00 544.03 0
2: 011000700 0.00 0.00 0.01 0
3: 011000800 363.44 12.79 2005.98 0
4: 011000900 0.00 0.00 0.00 0
5: 011001000 0.00 0.00 0.00 0
6: 011001100 0.00 0.00 1723.24 0

dcast 的命名约定默认为这种风格似乎很愚蠢,因为我认为这种类型的 reshape 无处不在。

鉴于我发现的其他一些帖子(例如 here ),我也尝试过事后修补,但它运行得非常慢(在完整数据集中有大约 400 个变量要重命名)
names(data)<-ifelse(substr(names(data),1,2) %in% c("19","20"),    
paste(substr(names(data),6,nchar(data)),
substr(names(data),1,4),sep="_") ,
names(copy))

(我试图找到所有以年份开头的变量--19xx 或 20xx--并尝试交换开头和结尾)

最佳答案

FR #5675现在在 v1.9.3 中实现。来自 NEWS

o dcast.data.table(dt, a ~ ... + b) now generates the column names with values from 'b' coming last. Closes #5675.



也就是说,现在您可以执行以下操作:
dcast.data.table(datam, id ~ ... + year)

# id principal_2013 principal_2014 interest_2013 interest_2014
# 1: 11000600 0.00 544.03 0.00 0
# 2: 11000700 0.00 0.01 0.00 0
# 3: 11000800 363.44 2005.98 12.79 0
# 4: 11000900 0.00 0.00 0.00 0
# 5: 11001000 0.00 0.00 0.00 0
# 6: 11001100 0.00 1723.24 0.00 0
# 7: 11001560 0.00 0.00 0.00 0
# 8: 11001650 0.00 0.00 0.00 0

并且列名将具有 year正如预期的那样,最后的值。

还添加了文档 - Doc #5676 .来自 NEWS :

o ?dcast.data.table now explains how the names are generated for the columns that are being casted. Closes #5676.



现在 ?dcast.data.table包含添加的行:

Names for columns that are being cast are generated in the same order (separated by a _) from the (unique) values in each column mentioned in the formula RHS.



HTH

关于r - dcast 重命名所有变量以数字开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23552780/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com