在R中的数据框架中将数据从行重新整形为列

时间:2016-08-05 13:15:45

标签: r transform reshape2

我想重新整理数据框中的以下格式的数据:

a  b  Type_c d  e  
1  1   0     10 9
2  1   0     20 9 
3  2   1     30 4
4  2   2     40 3
5  3   3     50 2
6  3   0     60 1
7  4   3     70 2
8  4   2     80 7 
9  4   2     90 8

并希望通过重塑或转换以下列格式获取数据。

a  b  Type_0_d Type_0_e Type_1_d Type_1_e type_2_d type_2_e type_3_d  type_3_e  
1  1  10       9          0        0         0      0         0          0
2  1  20       9          0        0         0      0         0          0
3  2  0        0          30       4         0      0         0          0
4  2  0        0          0        0        40      3         0          0
5  3  0        0          0        0         0      0        50          2
6  3  60       1          0        0         0      0         0          0
7  4  0        0          0        0         0      0        70          2
8  4  0        0          0        0        80      7         0          0
9  4  0        0          0        0        90      8         0          0

我发现在R中做同样的事情有点困难。但是,在Tableau中它只是直截了当。只是想知道是否有办法在R中有效地做同样的事情。

2 个答案:

答案 0 :(得分:3)

我们可以使用dcast中的data.tablevalue.var可以使用多个library(data.table) dcast(setDT(df1), a+b ~paste0("Type_", Type_c), value.var = c("d", "e"), fill = 0)

 function submitNewPoll(){
    var inputs = document.querySelectorAll('.fc-newpoll-option')
    var polltitle = document.querySelector('.fc-newpoll-title').value
    var payload = {
        polltitle: polltitle
    }
    inputs.forEach(function(input, index) {
        if (!input.value || input.value == '')  {abort = true}
            payload["option" + (index + 1)] = input.value
   })

   ajaxFunctions.ajax({
       method: 'POST',
       url: '/newpoll',
       success: function(){console.log('success')},
       error: function(err){console.log('error', err)},
       payload: JSON.stringify(payload)
    })
}

答案 1 :(得分:2)

另一个选项可能是使用spread tidyr个包

library(dplyr)
library(tidyr)
df1 %>% mutate(e1=Type_c) %>% spread(key = Type_c,value = d,fill = 0) %>% spread(key =e1,value = e,fill = 0)

我知道这是一个糟糕的解决方案,但它仍然在做这项工作。有关修改代码的任何建议都是受欢迎的。还有一件事我们必须正确地重命名列。