[英]Is there any way to generate year column from existing column names in 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 中引入melt()
的解決方案:
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")
您可以使用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
數據
df <- structure(list(Country = c("Afghanistan", "USA"), AXOX1991 = c(1L,
6L), AXOX1992 = c(2L, 5L), BXOX1991 = 3:4, BXOX1992 = 4:3, CXOX1991 = c(5L,
2L), CXOX1992 = c(6L, 1L)), class = "data.frame", row.names = c(NA, -2L))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.