gpt4 book ai didi

R:在没有 for 循环的情况下将 "short form"数据转换为 "long form"数据?

转载 作者:行者123 更新时间:2023-12-03 18:27:24 24 4
gpt4 key购买 nike

假设我有一个这样的 R 数据框:

  Subject Session  Property.A Property.B Property.C
1 100 1 -1.22527548 -0.9193751 -1.7501693
2 100 10 2.30627980 1.8940830 -0.8443976
3 100 2 2.33243332 -0.5860868 -4.2074489
4 100 3 0.38130810 -0.7336206 4.8016230
5 100 4 1.44685875 0.5066249 2.0138624
6 100 5 0.08907721 -0.3715202 1.4983700

我听说这种类型的数据框被称为“短格式”或“宽格式”。现在假设我想让它看起来像这样,我听说它被称为“长格式”:
  Subject Session  Property    Value
1 100 1 A -1.2252754
2 100 1 B -0.9193751
3 100 1 C -1.7501693
4 100 2 A 2.3324333
5 100 2 B -0.5860868
6 100 2 C -4.2074489

也就是说,我有 N 列我想减少到只有两个“名称/值”列,数据框中的任何其他列根据需要使用重复值扩展。

显然我可以用一堆 for 循环来执行这个转换,但这看起来真的很难看,如果/当我添加更多属性列时,维护起来会很痛苦。

有没有办法在 R 中用几行代码做到这一点?一些我还没有发现的神奇功能组合?

最佳答案

使用 melt包中的函数 reshape2 :

library(reshape2)
dat.m <- melt(dat, id.vars = c("Subject", "Session"))

如果您需要清理变量列的列名和/或值:
#change "variable" to "Property"
names(dat.m)[3] <- "Property"
#Drop "Property." from the column values
dat.m$Property <- gsub("Property\\.", "", dat.m$Property)

关于R:在没有 for 循环的情况下将 "short form"数据转换为 "long form"数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5877234/

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