我有一些看起来像这样的数据:
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
.
.
.
非常感谢任何帮助。虽然答案很简单,但我一直在努力解决这个问题。
答案 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)
使用use
和dplyr
,首先删除您不想要的列,然后传播tidyr
和trialnum
。
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