gpt4 book ai didi

r - 如何将列值转换为 R 中数据框中每个唯一值的行?

转载 作者:行者123 更新时间:2023-12-04 10:52:24 25 4
gpt4 key购买 nike

我有一个大数据框,其中每个包含 12 列,用于两种类型的值,即 Rested 和 Active。我想将每个月的列转换为行,从而将所有月份列(Jan、Feb、Mar ...)放在“Month”下

我的数据如下:

ID      L1  L2  Year    JR  FR  MR  AR  MYR JR  JLR AGR SR  OR  NR  DR  JA  FA  MA  AA  MYA JA  JLA AGA SA  OA  NA  DA
1234 89 65 2003 11 34 6 7 8 90 65 54 3 22 55 66 76 86 30 76 43 67 13 98 67 0 127 74
1234 45 76 2004 67 87 98 5 4 3 77 8 99 76 56 4 3 2 65 78 44 53 67 98 79 53 23 65

我试图使其如下所示(R 列代表已休息,A 列代表活跃。每月 JR、FR、MR 分别表示 Jan Rested、Feb Rested、Mar Rested 和 JA、FA、MA 分别表示 Jan Active、Feb活跃,三月活跃等):

因此,在这里,我尝试将每个月列转换为行,并通过创建一个新的月列将它们彼此并排以获取 R 和 A 值。
 ID     L1  L2  Year    Month   R   A
1234 89 65 2003 Jan 11 76
1234 89 65 2003 Feb 34 86
1234 89 65 2003 Mar 6 30
1234 89 65 2003 Apr 7 76
1234 89 65 2003 May 8 43
1234 89 65 2003 Jun 90 67
1234 89 65 2003 Jul 65 13
1234 89 65 2003 Aug 54 98
1234 89 65 2003 Sep 3 67
1234 89 65 2003 Oct 22 0
1234 89 65 2003 Nov 55 127
1234 89 65 2003 Dec 66 74
1234 45 76 2004 Jan 67 3
1234 45 76 2004 Feb 87 2
1234 45 76 2004 Mar 98 65
1234 45 76 2004 Apr 5 78
1234 45 76 2004 May 4 44
1234 45 76 2004 Jun 3 53
1234 45 76 2004 Jul 77 67
1234 45 76 2004 Aug 8 98
1234 45 76 2004 Sep 99 79
1234 45 76 2004 Oct 76 53
1234 45 76 2004 Nov 56 23
1234 45 76 2004 Dec 4 65

我尝试过各种方法,例如 stack , melt , unlist
data_reshape <- reshape(df,direction="long", varying=list(c("JR", "FR", "MR", "AR", "MYR", "JR", "JLR", "AGR", "SR", "OR", "NR", "DR", "JA", "FA","MA", "AA", "MYA", "JA", "JLA","AGA", "SA", "OA","NA", "DA")), v.names="Precipitation", timevar="Month")

data_stacked <- stack(data, select = c("JR", "FR", "MR", "AR", "MYR", "JR", "JLR", "AGR", "SR", "OR", "NR", "DR", "JA", "FA","MA", "AA", "MYA", "JA", "JLA","AGA", "SA", "OA","NA", "DA"))

但他们的结果并不完全符合预期 - 他们给出了所有年份的 Jan 值,然后是所有年份的 Feb 值,然后是所有年份的 March 值,等等。但我想以适当的每月方式为每一年构建它们对于整个数据集中存在的每个 ID。

如何在 R 中实现这一点?

最佳答案

这是一个基本的 reshape 方法:

res <- reshape(mydf, direction="long", varying=list(5:16, 17:28), v.names=c("R", "A"), times = month.name, timevar = "Month")
res[with(res, order(ID, -L1, L2, Year)), -8]

关于r - 如何将列值转换为 R 中数据框中每个唯一值的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30703400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com