我有以下样式化的宽数据框df_wide
,我想在R
年reshape 长数据框:
df_wide = data.frame(country = c("A", "B"),
gdp_1999 = c(100, 200),
gdp_2000 = c(400,500),
poverty_rate_1999 = c(35,40),
poverty_rate_2000 = c(10,15),
inequality_score_gini_1999 = c(20,25),
inequality_score_gini_2000 = c(40,45)
)
df_wide
country gdp_1999 gdp_2000 poverty_rate_1999 poverty_rate_2000 inequality_score_gini_1999 inequality_score_gini_2000
1 A 100 400 35 10 20 40
2 B 200 500 40 15 25 45
我想使用pivot_longer
按国家/地区/年份对数据进行长时间reshape ,使数据框架如下所示:
df_long = data.frame(country = c("A","A","B","B"),
year = c(1999,1999,2000,2000),
gdp = c(100,400,200,500),
poverty_rate = c(35,10,40,15),
inequality_score_gini = c(20,40,25,45))
df_long
country year gdp poverty_rate inequality_score_gini
1 A 1999 100 35 20
2 A 1999 400 10 40
3 B 2000 200 40 25
4 B 2000 500 15 45
用pivot_longer
我该怎么做?请注意,我特别挑选了带有不同下划线数的变量,因为相关的past posts不能为我的数据集提供足够的指导.我能做的最好是使用常规reshape
,一次reshape 一个存根图案,例如:
library(reshape)
long_data_gdp <- reshape(df_wide,
varying = c("gdp_1999", "gdp_2000"),
idvar = "country",
direction = "long",
sep = "_")
如果正确的答案能提供两个子答案,我将不胜感激:(1)答案为starts_with()
,因此所有事情都可以通过存根名称而不是names_pattern
来完成,因为当有多个下划线分隔符(即poverty_rate
和inequality_gini_score
不起作用)时,我try 在上面使用reshape
失败;(2) 答案是names_pattern
,但这解释了如何以非regex
专家易于理解的方式将最后一个下划线作为分隔符.