重新排列数据

时间:2016-05-17 17:48:29

标签: r reshape

我有一些看起来像这样的数据:

head(t)
       sub   trialnum   block.x    lat.x      block.y  lat.y  diff
1       1       10          3      1355          5      1337   18
2       1       11          3      1324          5      1470 -146
3       1       12          3      1861          5      1690  171
4       1       13          3      3501          5      1473 2028
5       1       14          3      1566          5      1402  164
6       1       15          3      1380          5      1539 -159

我想要做的是重新格式化R中的数据,使得“trialnum”(其中有20个)的值是新列,“sub”是行值,每个单元格都有“diff” “价值。例如

          trialnum1      trialnum2      trialnum3...
sub
 1      
 2      
 3      
 .
 .
 .

非常感谢任何帮助。虽然答案很简单,但我一直在努力解决这个问题。

2 个答案:

答案 0 :(得分:2)

基础包。我们使用函数diff转置列t(x),然后创建所需的列名。

df <- data.frame(t(t[, 7]))
# Using the trialnum column
colnames(df) <- paste0(colnames(t[2]), t[, 2])
# or just the number of rows
colnames(df) <- paste0(colnames(t[2]), 1:nrow(t))

输出:

   trialnum10 trialnum11 trialnum12 trialnum13 trialnum14 trialnum15
1         18       -146        171       2028        164       -159
  trialnum1 trialnum2 trialnum3 trialnum4 trialnum5 trialnum6
1        18      -146       171      2028       164      -159

答案 1 :(得分:1)

使用usedplyr,首先删除您不想要的列,然后传播tidyrtrialnum

diff

数据

library(dplyr)
library(tidyr)

t %>% select(-block.x:-lat.y) %>%    # get rid of extra columns so t will collapse
    mutate(trialnum = paste0('trialnum', trialnum)) %>%    # fix values for column names
    spread(trialnum, diff)    # spread columns

#   sub trialnum10 trialnum11 trialnum12 trialnum13 trialnum14 trialnum15
# 1   1         18       -146        171       2028        164       -159