R语言-数据转置

应用情境

在数据分析中,转置指的是将列数据转为行数据,或者行数据转为列数据,比如以下两种数据排列。

上图中的数据为传统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函数(参考网址

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值