【问题标题】:Reshaping Data in R vs python在 R 与 python 中重塑数据
【发布时间】:2023-03-23 01:49:01
【问题描述】:

我正在尝试在 R 中为 k-means 重构数据框。目前数据的结构如下:

 Subject Posture   s1 s2 s3....sn
  1       45       45 43 42 ...
  2       90       35  45 42 ..   
  3        0        3   56 98
  4        45       ....

等等。我想将所有 sn 变量折叠到一个列中,并使用 s 编号创建一个附加变量:

 Subject Posture sn dv 
 1       45       1 45 
 2       90       2 35    
 3        0       3  31 
 4        45      4  45

这在 R 中是否可行,或者我最好直接在 python 中重塑 csv? 非常感谢任何帮助。

【问题讨论】:

  • 折叠如何?意思是?中位数?和? R 非常适合此类工作,但您需要更具体。
  • 我对您的示例感到困惑,看不出两者之间的关系。您能否提供 3 行和 s1-s3 的精确映射?

标签: python r reshape


【解决方案1】:

这是基本 R 中的典型方法(尽管使用“reshape2”可能是更典型的做法)。

假设我们从“mydf”开始,定义为:

mydf <- data.frame(Subject = 1:3, Posture = c(45, 90, 0),  
    s1 = c(45, 35, 3), s2 = c(43, 45, 56), s3 = c(42, 42, 98))

您可以通过以下方式重塑:

reshape(mydf, direction = "long", idvar=c("Subject", "Posture"), 
        varying = 3:ncol(mydf), sep = "", timevar="sn")
#        Subject Posture sn  s
# 1.45.1       1      45  1 45
# 2.90.1       2      90  1 35
# 3.0.1        3       0  1  3
# 1.45.2       1      45  2 43
# 2.90.2       2      90  2 45
# 3.0.2        3       0  2 56
# 1.45.3       1      45  3 42
# 2.90.3       2      90  3 42
# 3.0.3        3       0  3 98

【讨论】:

  • data.frame(mydf[1:2],stack(mydf[-(1:2)])) 之类的东西也可以正常工作。
【解决方案2】:
require(reshape2)
melt(df, id.vars="Posture")

df 是您提供的 data.frame。下次请使用 dput() 提供实际数据。

我认为这对你有用。

编辑:

当然要先安装 reshape2 包。

【讨论】:

  • 这似乎是正确的想法。但是,我想保持所有变量不变,除了 s1...sn 变量
猜你喜欢
  • 1970-01-01
  • 2017-02-11
  • 1970-01-01
  • 2013-04-20
相关资源
最近更新 更多