应用情境
在数据分析中,转置指的是将列数据转为行数据,或者行数据转为列数据,比如以下两种数据排列。
上图中的数据为传统SPSS的排列方法,每行表示一名被试的数据结果,他回答了Q1和Q2两个问题;这种数据也可以被认为是 wide 的数据结构。
上图则依据被试每一次反应组织数据格式,每行表示被试对一个类型的问题(Qtype)做出了评分(Rating),因此一名被试有多行数据;这种数据也可以被认为是 long 的数据结构。
在我们进行混合线性模型分析时,需要使用这种数据转置的操作,尤其是在模型的层级关系中存在被试内变量的时候。此时需要将 wide 数据转变为 long 数据。
在正式操作之前,我们可能需要从诸多变量中选出自己需要的变量组成新的数据集。
library(haven)
#改变R的工作路径,之后打开数据的时候不用那么麻烦
setwd("E:/学习/S1")
S1A <- read_sav("S1a_Data_Analysis.sav")
#查看数据集
> head(S1A)
# A tibble: 6 x 15
ID gender age grade subject pre_IOS pre_pr~1 pre_A~2 Choice Self_~3 Other~4 post_~5 post_~6 post_~7
<dbl> <fct> <dbl> <chr> <chr> <dbl> <dbl> <dbl> <fct> <chr> <chr> <dbl> <dbl> <dbl>
#……………………
#选取数据集中部分变量数据,逗号前可以用范围选取部分行,逗号后选取列
subset <- S1A[,c(1:3,15,7,14)]
> head(subset)
# A tibble: 6 x 6
ID gender age SC_final pre_prosocial post_prosocial
<dbl> <fct> <dbl> <dbl> <dbl> <dbl>
1 5 1 23 1.83 2.25 2
2 14 1 23 2.5 4.25 4
3 25 1 21 3.92 4.5 4.75
4 57 1 25 3.75 3.75 4
5 58 1 23 2.33 3.5 4.25
6 59 1 19 3.33 3.25 3.25
R语言:tidyr函数包
转置的操作可以在SPSS-数据(Data)-转置(Restructure)中完成,也可以在R语言中使用编程达到,此处主要使用tidyr函数包实现操作(参考网址)。
具体语句为:pivot_longer()
pivot_longer(data = data.frame, cols = columns.to.pivot,
names_to = "New Column Name", values_to = "New Column Name")
其中,data是需要进行转置操作的数据集名称;cols则是列出了需要转置的变量;names_to则是转置的被试内变量的变量名;values_to则是命名之前每个格子中的具体值,即真正的因变量。
对于上文提到的subset数据集,我们需要将前后两次的测量(pre_prosocial和post_prosocial)转置为一列,同时新定义变量名为measures,因变量命名为prosocial。
library(tidyr) #导入用于转置数据
subset.anal <- pivot_longer(data = subset, cols = "pre_prosocial":"post_prosocial",
names_to = "measure", values_to = "prosocial")
> head(subset.anal)
# A tibble: 6 x 6
ID gender age SC_final measures prosocial
<dbl> <fct> <dbl> <dbl> <chr> <dbl>
1 5 1 23 1.83 pre_prosocial 2.25
2 5 1 23 1.83 post_prosocial 2
3 14 1 23 2.5 pre_prosocial 4.25
4 14 1 23 2.5 post_prosocial 4
5 25 1 21 3.92 pre_prosocial 4.5
6 25 1 21 3.92 post_prosocial 4.75
#因为measures在正式分析中应该为类别变量,因此需要改变变量格式:
subset.anal$measures <- as.factor(subset.anal$measures)
> head(subset.anal)
# A tibble: 6 x 6
ID gender age SC_final measures prosocial
<dbl> <fct> <dbl> <dbl> <fct> <dbl>
1 5 1 23 1.83 pre_prosocial 2.25
2 5 1 23 1.83 post_prosocial 2
3 14 1 23 2.5 pre_prosocial 4.25
4 14 1 23 2.5 post_prosocial 4
5 25 1 21 3.92 pre_prosocial 4.5
6 25 1 21 3.92 post_prosocial 4.75
其他方法
在搜索过程中发现的其他数据转置方法,可打开链接自行学习:
reshape2函数包(参考网址)
reshape函数(参考网址)