我正在尝试在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? 非常感谢任何帮助。
答案 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