时间:2018-03-23 23:27:02

标签: r reshape melt

我试图用变量解开一个大表。 这个帖子只给了我提示,但没有解决我的问题(How to "unmelt" data with reshape r)。

我想从这里开始:

name1   name2   values  group
xyz1    abc1    1   group1
xyz2    ghf 2   group2
xyz3    lmn 3   group1
xyz4    opq 4   group2
xyz1    abc1    5   group2
xyz2    ghf 6   group1
xyz3    lmn 7   group2
xyz4    opq 8   group1
xyz5    stu 2   group3

name1   name2   group_1 gruoup_2    group_3
xyz1    abc1    1   6   NA
xyz2    ghf33   6   2   NA
xyz3    lmn93   3   5   NA
xyz4    opq42   8   4   NA
xyz5    stu21   NA  NA  2

我当前的“unmelt”命令是

d <- read.table("test.txt", header=T, sep="\t")
e <- dcast(d, name1 + name2 ~ group ~ values)

但是这不会将值分配给组以及name1和name2 如果你可以帮助我,那会很棒。 非常感谢! d

2 个答案:

答案 0 :(得分:2)

您可以使用基础R的reshape(df, idvar = c("name2", "name1"), timevar = "group", direction = "wide") # name1 name2 values.group1 values.group2 values.group3 #1 xyz1 abc1 1 5 NA #2 xyz2 ghf 6 2 NA #3 xyz3 lmn 3 7 NA #4 xyz4 opq 8 4 NA #9 xyz5 stu NA NA 2

reshape2::dcast

或使用reshape2::dcast(df, name1 + name2 ~ group, value.var = "values"); # name1 name2 group1 group2 group3 #1 xyz1 abc1 1 5 NA #2 xyz2 ghf 6 2 NA #3 xyz3 lmn 3 7 NA #4 xyz4 opq 8 4 NA #5 xyz5 stu NA NA 2

df <- read.table(text =
    "name1   name2   values  group
xyz1    abc1    1   group1
xyz2    ghf 2   group2
xyz3    lmn 3   group1
xyz4    opq 4   group2
xyz1    abc1    5   group2
xyz2    ghf 6   group1
xyz3    lmn 7   group2
xyz4    opq 8   group1
xyz5    stu 2   group3", header = T)

样本数据

enum ValueTypes: String {
    case value1 = "moobs"
    case value2 = "notMoobs"
}

func myMethod(myType: ValueTypes) {
    //Your code goes here
}

myMethod(myType: .value1)
myMethod(myType: .value2)

答案 1 :(得分:1)

您可以在spread中使用tidyr。那是

spread(my_data, group, values)

有关spread的其他示例,请参阅here