【发布时间】:2020-02-06 00:26:54
【问题描述】:
我正在尝试将数据框的多个特定列融合/堆叠/收集为 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.x.x value.x.x
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
我根据上面看起来非常相似的帖子尝试在 tidyr 中使用 pivot_longer,这取决于我所做的事情导致各种错误:
pivot_longer(df,
cols = -c(ID, Code, Country),
names_to = c(".value", "group"),
names_sep = ".")
我还以各种方式在 reshape2 中使用了melt,它们要么只熔化了值列,要么只熔化了年列。如:
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 gather,但我发现很难理解帮助页面和帖子。 明确我想要实现的目标:
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.
非常感谢这里的帮助。
【问题讨论】:
-
该帖子的答案与我上面提供的相同。
-
@KNN 如果您要更新示例,请保留原始示例,因为更新和删除原始输入示例有点挫败原始答案的努力
-
该帖子有 5 个答案,然后被标记为与一个有 7 个答案的重复。这些都不能适应帮助?您是否尝试过转义分隔符中的
.,因为它是正则表达式特殊字符?
标签: r dplyr tidyr reshape2 melt