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

标签 r

我有一个大数据框,其中每个包含 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/

相关文章:

r - 从 R 中的数据框创建词云

r - 使用上一行更新列值

r - 按列 : the data. 表方式归一化

R:为图中的轴区域添加大括号

r - dplyr 仅返回分组和计算列

r - 使用 lapply 或 ifelse 从风的 U 和 V 分量计算风向

r - R中没有for循环的就地列表修改

r - 将增量数字附加到列中的特定字符串

c++ - 如何在 Windows R 中显示 C++ 输出消息

r - 我可以通过 ID 列和最近的日期值在 R 中连接 2 个数据帧吗