【发布时间】:2017-03-29 23:21:47
【问题描述】:
我有一个实时捕获的数据框。有两个系统,每个系统都有不同的状态。给出了每个状态的周数和人数。
df <- data.frame (sys = rep(c("a","b"), each=3),
sta = rep(c("L","T","P"), times=2),
w01 = c("0","2","5","2","2","5"),
w02 = c("3","2","2","4","6","1"),
w03 = c("4","1","0","5","3","0"))
df
sys sta w01 w02 w03
a L 0 3 4
a T 2 2 1
a P 5 2 0
b L 2 4 5
b T 2 6 3
b P 5 1 0
我想要一个显示每个数字的系统和状态的数据框。结果如下所示:
sys sta Num
a L 0
a L 3
a L 4
a T 2
a T 2
a T 1
a P 5
a P 2
a P 0
b L 2
b L 4
b L 5
b T 2
b T 6
b T 3
b P 5
b P 1
b P 0
我完全不知道如何做到这一点。我找到了这两个问题/答案
Reorganise 2x36 dataframe to a 6x6 dataframe. Dice throw visualisation
Reshaping data.frame from wide to long format
但找不到适合我的问题的方法。
我也尝试了reshape,但direction = "wide" 没有给出我需要的输出,我被direction = "long" 的不同部分吸引住了。这是我尝试过的,但没有奏效......
a <- as.vector(colnames(df[-c(1,2)]))
df2 <- reshape(df, idvar = "sys", timevar = "sta", varying = a , direction = "long")
有什么建议可以解决这个问题吗? 谢谢大家和亲切的问候!
P.S.:我需要数据集的“新格式”来进行 Friedman 测试 (friedman.test)。会这样吗?
【问题讨论】:
-
stackoverflow.com/questions/2185252/… 正是您所需要的,您是否尝试过那里的其他解决方案?
-
df2 <- reshape(df, idvar = c("sys", "sta"), varying = c('w01', 'w02', 'w03'), direction = "long", sep = '', new.row.names = 1:18)为您提供所需的一切。不过,reshape太可怕了;尝试学习reshape2或tidyr包。 -
感谢您找到无需额外软件包的解决方案!如果我需要更频繁地进行这样的重组,我将学习使用这个包。但如果我只需要一次,我总是对不需要额外的解决方案感到满意。