我正在尝试将数据帧的多个特定列合并/堆叠/收集为2列,并保留所有其他列。我已经尝试过很多关于stackoverflow的答案,但都没有成功(下面有一些)。我基本上在这里有类似于此职位的情况:Reshaping multiple sets of measurement columns (wide format) into single columns (long format)仅保留和合并更多列。重要的是要提到我的年份列是因素,并且我的列比下面列出的示例多得多,所以我要称呼列名而不是排名。
>df
ID Code Country year.x value.x year.y value.y year.z value.z
1 A USA 2000 34.33422 2001 35.35241 2002 42.30042
1 A Spain 2000 34.71842 2001 39.82727 2002 43.22209
3 B USA 2000 35.98180 2001 37.70768 2002 44.40232
3 B Peru 2000 33.00000 2001 37.66468 2002 41.30232
4 C Argentina 2000 37.78005 2001 39.25627 2002 45.72927
4 C Peru 2000 40.52575 2001 40.55918 2002 46.62914
[我根据上面的帖子尝试在提迪尔中使用pivot_longer,这似乎非常相似,根据我的操作,会导致各种错误:
pivot_longer(df,
cols = -c(ID, Code, Country),
names_to = c(".value", "group"),
names_sep = ".")
我还以各种方式处理了reshape2中的熔炉,这些熔炉仅熔化了值列或仅熔化了年列。如:
new.df <- reshape2:::melt(df, id.var = c("ID", "Code", "Country"), measure.vars=c("value.x", "value.y", "value.x.x", "value.y.y", "value.x.x.x", "value.y.y.y"), value.name = "value", variable.vars=c('year.x','year.y', "year.x.x", "year.y.y", "year.x.x.x", "year.y.y.y", "value.x", variable.name = "year")
我还尝试了基于其他帖子的dplyr收集,但是我很难理解帮助页面和帖子。要明确我要实现的目标:
ID Code Country year value
1 A USA 2000 34.33422
1 A Spain 2000 34.71842
3 B USA 2000 35.98180
3 B Peru 2000 33.00000
4 C Argentina2000 37.78005
4 C Peru 2000 40.52575
1 A USA 2001 35.35241
1 A Spain 2001 39.82727
3 B USA 2001 37.70768
3 B Peru 2001 37.66468
4 C Argentina2001 39.25627
4 C Peru 2001 40.55918
1 A USA 2002 42.30042
etc.
我非常感谢您的帮助。
我们可以指定names_pattern
library(tidyr)
library(dplyr)
df %>%
pivot_longer(cols = -c(ID, Code, Country),
names_to = c(".value", "group"),names_pattern = "(.*)\\.(.*)")
或将names_sep
与转义的.
一起使用>
pivot_longer(df,
cols = -c(ID, Code, Country),
names_to = c(".value", "group"),
names_sep = "\\.")