在reshape2中使用铸件进行部分旋转

时间:2017-04-15 01:44:51

标签: casting dplyr reshape2 tidyr melt

我不确定这是否有资格作为转动,这就是为什么我认为我会问小组。我不确定如何从输入到下面的输出数据帧。我用逗号分隔它们,因为我找不到创建表的方法。

输入:

标题:key1,key2,key3,type,value

值:

    a1, b1, c1, fruit,     1
    a1, b1, c1, vegetable, 3
    a2, b2, c2, fruit,     7
    a2, b2, c2, vegetable, 11
    a2, b2, c2, nut,       13

输出:

标题:key1,key2,key3,水果,蔬菜,坚果

值:

    a1, b1, c1, 1,  3, 
    a2, b2, c2, 7, 11, 13

也就是说,我希望认识到“类型”列有不同的选择(水果,蔬菜,坚果)并为每个选项创建一个列并将值放入其中。由于a1,b1,c1没有螺母值,我将其留空。

它真的还在转动还是有另一种方法可以做到这一点?非常感谢你!

2 个答案:

答案 0 :(得分:0)

意识到它比当时看起来更容易。 dcast(myDataFrame,key1 + key2 + key3~type,value.var =" value")就可以了。

答案 1 :(得分:0)

tidyrspread(type, value)

可以快速轻松地将您的画面从长格式转换为宽格式。

[与您的'farmstand'数据框dput() - 编辑。]

> dput(farmstand)
structure(list(key1 = c("a1", "a1", "a2", "a2", "a2"), key2 = c("b1", 
"b1", "b2", "b2", "b2"), key3 = c("c1", "c1", "c2", "c2", "c2"
), type = c("fruit", "vegetable", "fruit", "vegetable", "nut"
), value = c(1, 3, 7, 11, 13)), .Names = c("key1", "key2", "key3", 
"type", "value"), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-5L))

> farmstand %>% spread(type, value)
# A tibble: 2 × 6
   key1  key2  key3 fruit   nut vegetable
* <chr> <chr> <chr> <dbl> <dbl>     <dbl>
1    a1    b1    c1     1    NA         3
2    a2    b2    c2     7    13        11

请参阅此处了解更多酷炫,快速且简单的数据争吵技巧:data-wrangling-cheatsheet