在R与python中重塑数据

时间:2014-02-25 01:11:24

标签: python r reshape

我正在尝试在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-number创建一个附加变量:

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

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

2 个答案:

答案 0 :(得分:2)

require(reshape2)
melt(df, id.vars="Posture")

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

我认为这对你有用。

编辑:

当然首先要安装reshape2包。

答案 1 :(得分:2)

这里是基础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