R 中的整洁多变量数据
Tidy multivariate data in R
我有一个具有以下结构的数据集:
行是实验参与者,列是他们回答的问题。所有标题为 EC 的列都属于一种任务类型,所有标题为 ART 的列都属于另一种任务,依此类推。
将 table 读入 R 后,如何整理数据以便将属于一种任务类型的所有问题保存为单个变量?我基本上希望将每种类型的任务(所有参与者为该任务给出的所有答案)保存为单独的变量,稍后我可以对其进行统计分析。
我知道 gather 和 separate 可能是有用的命令,但我不完全理解如何在这里使用它们,也不完全理解它们的语法。
例如:
gather(data,key, value) - 我认为 'key' 应该指的是我给变量的标题?并且 'value' 指的是与该变量相关的值所在的字段?如果是这样,'data' 指的是什么?我尝试将 table 的名称放在 'data' 字段中,但出现错误 'Error: Invalid column specification'.
有人可以帮忙吗?
这里必须有一个 dup,但是如果我们模拟一些数据:
library(tidyr)
library(purrr)
library(dplyr)
这部分只是重新创建了一个您看起来拥有的数据集。解决方案不需要理解这一点。
df <- map(1:16, ~sample(0:4, 10, replace=TRUE))
df <- as.data.frame(df)
df <- set_names(df, c(sprintf("EC%d", 1:4), sprintf("ART%d", 1:4), sprintf("IC%d", 1:4), sprintf("AQ%d", 1:4)))
df <- mutate(participant=sprintf("id%d", 10))
这是 df
最终的样子:
df
## EC1 EC2 EC3 EC4 ART1 ART2 ART3 ART4 IC1 IC2 IC3 IC4 AQ1 AQ2 AQ3 AQ4 participant
## 1 4 2 1 4 2 2 3 1 4 2 0 4 3 0 4 2 id10
## 2 3 4 1 0 1 1 1 2 3 4 0 4 2 1 4 3 id10
## 3 4 2 3 2 0 1 3 4 4 1 2 4 0 1 0 4 id10
## 4 1 4 0 3 2 3 1 2 0 2 1 1 1 3 3 1 id10
## 5 2 3 1 1 2 4 1 0 3 0 3 3 0 1 4 2 id10
## 6 4 0 1 1 1 4 2 0 3 0 1 3 3 3 2 0 id10
## 7 3 1 1 1 4 1 1 0 0 2 1 4 3 2 2 3 id10
## 8 0 4 0 1 4 4 2 4 0 1 1 3 1 1 4 0 id10
## 9 0 0 4 4 0 1 0 3 1 0 2 3 4 4 1 0 id10
## 10 2 0 2 1 4 2 3 4 3 4 4 4 3 0 4 4 id10
这似乎是您数据的格式。
如果是这样,那么,我想这就是你想要的:
df <- gather(df, answer, value, -participant)
head(df, 20)
## participant answer value
## 1 id10 EC1 4
## 2 id10 EC1 3
## 3 id10 EC1 4
## 4 id10 EC1 1
## 5 id10 EC1 2
## 6 id10 EC1 4
## 7 id10 EC1 3
## 8 id10 EC1 0
## 9 id10 EC1 0
## 10 id10 EC1 2
## 11 id10 EC2 2
## 12 id10 EC2 4
## 13 id10 EC2 2
## 14 id10 EC2 4
## 15 id10 EC2 3
## 16 id10 EC2 0
## 17 id10 EC2 1
## 18 id10 EC2 4
## 19 id10 EC2 0
## 20 id10 EC2 0
您可能有也可能没有主题的 ID 变量,但我们不知道,因为我们确实没有您的数据。
我有一个具有以下结构的数据集:
行是实验参与者,列是他们回答的问题。所有标题为 EC 的列都属于一种任务类型,所有标题为 ART 的列都属于另一种任务,依此类推。
将 table 读入 R 后,如何整理数据以便将属于一种任务类型的所有问题保存为单个变量?我基本上希望将每种类型的任务(所有参与者为该任务给出的所有答案)保存为单独的变量,稍后我可以对其进行统计分析。
我知道 gather 和 separate 可能是有用的命令,但我不完全理解如何在这里使用它们,也不完全理解它们的语法。
例如:
gather(data,key, value) - 我认为 'key' 应该指的是我给变量的标题?并且 'value' 指的是与该变量相关的值所在的字段?如果是这样,'data' 指的是什么?我尝试将 table 的名称放在 'data' 字段中,但出现错误 'Error: Invalid column specification'.
有人可以帮忙吗?
这里必须有一个 dup,但是如果我们模拟一些数据:
library(tidyr)
library(purrr)
library(dplyr)
这部分只是重新创建了一个您看起来拥有的数据集。解决方案不需要理解这一点。
df <- map(1:16, ~sample(0:4, 10, replace=TRUE))
df <- as.data.frame(df)
df <- set_names(df, c(sprintf("EC%d", 1:4), sprintf("ART%d", 1:4), sprintf("IC%d", 1:4), sprintf("AQ%d", 1:4)))
df <- mutate(participant=sprintf("id%d", 10))
这是 df
最终的样子:
df
## EC1 EC2 EC3 EC4 ART1 ART2 ART3 ART4 IC1 IC2 IC3 IC4 AQ1 AQ2 AQ3 AQ4 participant
## 1 4 2 1 4 2 2 3 1 4 2 0 4 3 0 4 2 id10
## 2 3 4 1 0 1 1 1 2 3 4 0 4 2 1 4 3 id10
## 3 4 2 3 2 0 1 3 4 4 1 2 4 0 1 0 4 id10
## 4 1 4 0 3 2 3 1 2 0 2 1 1 1 3 3 1 id10
## 5 2 3 1 1 2 4 1 0 3 0 3 3 0 1 4 2 id10
## 6 4 0 1 1 1 4 2 0 3 0 1 3 3 3 2 0 id10
## 7 3 1 1 1 4 1 1 0 0 2 1 4 3 2 2 3 id10
## 8 0 4 0 1 4 4 2 4 0 1 1 3 1 1 4 0 id10
## 9 0 0 4 4 0 1 0 3 1 0 2 3 4 4 1 0 id10
## 10 2 0 2 1 4 2 3 4 3 4 4 4 3 0 4 4 id10
这似乎是您数据的格式。
如果是这样,那么,我想这就是你想要的:
df <- gather(df, answer, value, -participant)
head(df, 20)
## participant answer value
## 1 id10 EC1 4
## 2 id10 EC1 3
## 3 id10 EC1 4
## 4 id10 EC1 1
## 5 id10 EC1 2
## 6 id10 EC1 4
## 7 id10 EC1 3
## 8 id10 EC1 0
## 9 id10 EC1 0
## 10 id10 EC1 2
## 11 id10 EC2 2
## 12 id10 EC2 4
## 13 id10 EC2 2
## 14 id10 EC2 4
## 15 id10 EC2 3
## 16 id10 EC2 0
## 17 id10 EC2 1
## 18 id10 EC2 4
## 19 id10 EC2 0
## 20 id10 EC2 0
您可能有也可能没有主题的 ID 变量,但我们不知道,因为我们确实没有您的数据。