微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法从 R 中的现有列名生成年份列? 数据

如何解决有没有办法从 R 中的现有列名生成年份列? 数据

我正在使用一个数据集,该数据集将相应的年份附加到变量名称作为后缀,例如AXOX1991,其中 AXO 是变量。我试图将年份与变量标签/列名称分开以生成年份列,以便可以将数据集作为时间序列数据进行分析。

换句话说,现有数据集看起来像:

国家 AXOX1991 AXOX1992 BXOX1991 BXOX1992 CXOX1991 CXOX1992
阿富汗 1 2 3 4 5 6
美国 6 5 4 3 2 1

我正在尝试创建以下内容

国家 AXO BXO 首席运营官
阿富汗 1991 1 3 5
阿富汗 1992 2 4 6
美国 1991 6 4 2
美国 1992 5 3 1

如您所见,X 不仅充当分隔变量名称和年份的分隔符,而且它也是变量名称的一部分。 R 中有没有办法将年份与现有列名中的变量名分开,然后创建如上所示的年份列?

我一直在考虑解决方法,例如循环,但我还没有走得很远,而且我真的被难住了。我有 900 多个可变年,所以我想尽可能避免手工制作。

谢谢!

解决方法

为了完整起见,这里是一个使用 melt() 和新的 measure() 函数的解决方案(在 data.table v1.14.1 中引入):

library(data.table) # development version 1.14.1
melt(setDT(df),measure.vars = measure(value.name,year,pattern = "(\\w{3})X(\\d{4})"))
       Country year AXO BXO CXO
1: Afghanistan 1991   1   3   5
2:         USA 1991   6   4   2
3: Afghanistan 1992   2   4   6
4:         USA 1992   5   3   1

数据

library(data.table)
df <- fread("Country    AXOX1991    AXOX1992    BXOX1991    BXOX1992    CXOX1991    CXOX1992
Afghanistan 1   2   3   4   5   6
USA 6   5   4   3   2   1")
,

您可以使用 Send -

tidyr::pivot_longer

数据

res <- tidyr::pivot_longer(df,cols = -Country,names_to = c('.value','Year'),names_pattern = '([A-Z]+)X(\\d+)')
res

#  Country     Year    AXO   BXO   CXO
#  <chr>       <chr> <int> <int> <int>
#1 Afghanistan 1991      1     3     5
#2 Afghanistan 1992      2     4     6
#3 USA         1991      6     4     2
#4 USA         1992      5     3     1

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。