如何利用集散来解决问题? (提迪尔)

时间:2018-09-25 21:38:40

标签: r tidyr

将表1转换为表2。

enter image description here

我可以通过创建表1来解决第一部分。

library(tidyverse) 
grp = c("A", "A", "B", "B")
sex = c("F", "M", "F", "M")
meanL = c(0.22, 0.47, 0.33, 0.55)
sdL = c(.11, .33, .11, .31)
meanR = c(.34, .57, .4, .65)
sdR = c(.08, .33, .07, .27)
data <- as.data.frame(cbind(grp, sex, meanL, sdL, meanR, sdR))
head(data)

我能做的最好的事情是将所有数据收集到两列中,一列包含变量,另一列包含值。

data2 <- gather(data, categories, meanL:sdR)
head(data2, n=30)

我目前正在努力的地方是为每个阅读标记性别。

1 个答案:

答案 0 :(得分:0)

这是一个tidyverse选项:

data %>%
        gather(k, v, -grp, -sex) %>%
        unite(k, sex, k, sep = ".") %>%
        spread(k, v)
#  grp F.meanL F.meanR F.sdL F.sdR M.meanL M.meanR M.sdL M.sdR
#1   A    0.22    0.34  0.11  0.08    0.47    0.57  0.33  0.33
#2   B    0.33     0.4  0.11  0.07    0.55    0.65  0.31  0.27

我建议逐行运行代码,以查看每个步骤的作用。简而言之,我们将数据从宽到长整形,合并列,然后再次从长到宽整形。