c++控制台应用每一列数据如何对齐_R语言数据处理全流程教学

398d90588c7cdd86128a426b2ca1be5b.png

R语言数据处理全过程


R 语言作为一款功能强大的统计分析、绘图和数据挖掘软件,被社会科学领域的研究者们广泛应用于数据处理和图表制作等工作。由于 R 语言需要一定的编程基础,其开源属性又带来了千千万万的功能包(package),使得 R 语言的初学者常常不知从何入手,不知道学习哪些代码与功能包足够满足自己的统计需求。
因此,本文旨在介绍R语言中数据整理和分析的主要步骤,以及每一步需要的代码和功能包。本文以自变量为2 (social class: working vs. upper) × 2 (orientation: self vs. other ) × 10 (emotion: ...)的分类变量,因变量为scores连续变量的数据集为例,从原始数据导入,数据筛选和整理、描述性结果呈现、绘图、到常用统计方法的应用,进行一套完整的数据处理和统计分析流程的介绍。
本文主要参照 Data Skills for Reproducible Science 和作者本人的实战经验,希望对 R 语言的初学者有所帮助。 注:本文用于示例的数据及结果均为虚构 所需功能包如下: library(tidyverse)
library(readxl)
library(dplyr)

1. 原始数据导入


读取数据(数据文件须与 Rmd 文件在同一个文件夹中): orig_data
以下是原始数据(Qualtrics中收集)在 R 中的视图,与在 Excel 中基本一样。点击右上角方框中的 orig.data 就能显示出。
orig_data 数据集:

db9ba28547982cdee6b2a712387edbc2.png

2. 数据筛选和整理


在对数据进行重新编码、清理、排序、重组等工作时,我们常使用 Excel 来完成,效率往往比较低下,做了很多重复性工作,导致头发减少和脾气暴躁。
R语言为数据整理提供了非常简便和灵活的功能包,通过三个步骤,就能将原始数据整理为可以用于统计分析的数据。 1) 筛选题目(列)并更改名称
在上图的原始数据集中有许多 Qualtrics 系统默认的题目,如 start date, end date, finished,以及后面的题目名 Q1, Q2 等。我们首先选出对我们有用的题目(列)。
运用 select( ) 命令进行选择,括号中可以为该列的名称(如 start data, end data, Q2, Q2 )或该列的编号 1,2,3。此处建议写名称,以免造成混乱。 select_data %
select(Q8, Q9, Q14, Q13, Q58, Q57, Q63, Q64, Q19, Q20, Q68, Q69, Q24, Q25, Q29, Q30, Q34, Q35, Q78, Q79, Q125, Q127, Q126, Q128)
筛选后 select_data 数据集如下:

e69ded3bde2998e282363e14030f6dc8.png

运用 rename( ) 命令对题目(列)名称进行更改: select_data %
select(Q8, Q9, Q14, Q13, Q58, Q57, Q63, Q64, Q19, Q20, Q68, Q69, Q24, Q25, Q29, Q30, Q34, Q35, Q78, Q79, Q125, Q127, Q126, Q128)%>%
rename(working_amusement_self = Q8, upper_amusement_self = Q9, working_awe_other = Q14, ...... )
rename( )中,=左侧为新名称,=右侧为旧名称。
注:不同命令(select, rename...)之间用%>%连接,表示在前一个命令完成后的数据集基础上进行下一个命令,省去了重新定义和引用数据集。
现在的 select_data 数据集

799163e381b9f6519bf2a6bcfb77ea9a.png


2)筛选被试(行),并添加 id

上图中,行 1 和行 2 为系统默认的题目名称和编码,我们需要删除这两行: select_data
上图 [ ] 中,第二个逗号左侧为 -c(1, 2) 表示删除第 1 和 2 行,第二个逗号右侧为空格,表示列不改变。
然后,我们用 mutate 命令添加一列 id,并使数列为 1, 2, 3, 4, ...,并用 select 先选择id,再选择其余的,以此将 id 置于最左侧。select_data %
mutate(id = row_number())%>%
select(id, everything())
现在的 select_data 数据集:

39fb7f6eb7c77898fd9471bf3e8ec52b.png

3)重新组织数据
接下来,我们需要对数据集进行重组,以达到以下三个目标:
a. 每一个变量有自己的列
b. 每一个被试有自己的行
c. 每一个值有自己的空格
上图中,每一个题目(列)包含了三个变量信息(social class, orientation, emotion;如第一列 working_amusement_self。因此,我们需要让这三个变量有自己独立的一列。

3.1)将 N 列题目聚集为 1 列
定义一个新的数据集 tidy_data,引用 select_data 数据集,并对 N 列聚集:tidy_data %
gather("variables", "scores", 2:21)
运用 gather( ) 命令,将所选择的 N 列聚集为1列,聚集规则为将所选择的列的名称 (variables) 聚集为第一列,将所选择的列的值 (scores) 聚集为第二列,gather 括号中分别为这两列的名称以及选择的列的范围。
聚集之后的 tidy_data 数据集:

762b91f9578f425fc1bdd80a4b35896e.png

之后,我们需要将 variables 里每一行的三个变量分开,变为三列,这会让每一个 id 对应每一个变量,对应每一个 score。

3.2)将变量拆分为独立的列
运用 separate ( ) 将 variables 中的三个变量拆开,并对应到每一个 id 和 score。tidy_data %
gather("variables", "scores", 2:21)%>%
separate(variables, c("social_class", "emotion", "orientation"), sep = "_")
separate( ) 中第一个表示要拆分的列(variables),c( ) 中表示拆分之后三个变量的命名(“social class”, “emotion”, “orientation”),sep = 指分隔三个变量的符号“_”。
拆分后的 tidy_data 数据集:

51daff6275da61f7856e93a29e4ec3f8.png

对 id 排序后的 tidy_data 数据集:

0c13eeef007af8631f82685f0cbcd697.png

id1 的每一行表示,在某一 social class+emotion+orientation 条件下的 score。
到此,数据整理就基本完成了。在这个数据集的基础上,我们可以灵活运用以上命令,根据自己的需要,重新组织数据集。

▌拓展 

a. 用 filter( ) 筛选数据
在筛选数据时,除了用 select 进行整行和整列的选择以外,还可以用 filter( ) 定义某些规则,对某一列的数据进行筛选。规则如,大于 5、小于 10、不等于 0、等于 0 等等。具体参见 Data Skills for Reproducible Science 5.5.2

https://psyteachr.github.io/msc-data-skills/dplyr.html#filter

b. 定义变量的数据类型
在 R 中,如果变量的数据类型有误,在进行数据运算时会出现报错,因此在必要时我们手动定义数据类型。
- 查看数据类型
str( ) 括号中输入数据集名称,运行后会显示该数据集中各变量的类型(factor, characters, ...)
- 定义数据类型
将 scores 定义为数值,将 social class 定义为因素tidy_data$scores tidy_data$social_class

c. 计算均值并添加为列
很多时候,我们需要比较某个变量不同水平之间的均值是否有差异。例如,本例中,我们只想比较不同被试在 social class(working vs. upper)中的 scores 是否有差异。这种情况,我们就需要计算每个 id 的 working 和 upper 的 scores 的均值。
新定义一个数据集 tidy_data2,并引用 tidy_data1 的数据;用 group_by( ) 对数据集以 id 和 social class 分组;用 mutate( ) 生成一列数据,数据内容为 scores(分组后计算的)均值,用 select( ) 去掉不需要的列。tidy_data2 %
group_by(id, social_class)%>%
mutate(ave = mean(scores))%>%
select(-c(3:5))
tidy_data2 数据集如下:

0a21a7e8cd2c41ef3ad059c5cda01f91.png

每一个被试拥有 working 和 upper 两个水平各自对应的 scores,该 scores 是由 emotion 和 orientation 的 scores 平均而来。
注:由于之前存在 emotion 和 orientation 对应的 scores 行,这些行在计算均值后仍保留在数据集中,ave 在这些行中重复出现。我们需要去掉内容重复的行: tidy_data2
tidy_data2 数据集: 2727f890d1cda57c9ae35e4bc8d5ca8d.png

3. 描述性结果呈现


1)计算均值和标准差

计算不同 social class 和 orientation 下 scores 的均值和标准差。
在 tidy_data 中,用 group_by( ) 将数据以 social class 和 orientation 分组;用 summarise( ) 呈现 mean 和 sd。 tidy_data%>%
group_by(social_class, orientation)%>%
summarise(mean = mean(scores), sd = sd(scores))

65107ddba96e24a0b6e7fce36828900a.png

4. 绘图

本节主要介绍如何使用 ggplot( ) 进行画图
为了展示不同类型的图,我们采用比较完整的数据集,即 tidy_data(包含 id, social class, emotion, orientation, scores)
代码结构:ggplot( ) + 图类型() + 其他设置
- 首先制作箱图,以 social class 为横坐标,scores 为纵坐标,emotion 为分类图例: ggplot(tidy_data, aes(social_class, scores, fill = emotion))+
geom_boxplot(alpha = 0.5) (此处省略一些花里胡哨的设置)

00ca9d7e2336b7ad379532b5b6c854c2.png

用 ggsave( ) 保存图片 ggsave("Figure 1.jpg", width = 7, height = 4)
- 再做一个柱状图,以 social class 为横坐标,scores 为纵坐标,并计算 error bar。 ggplot(tidy_data, aes(social_class, scores, fill=social_class))+
  stat_summary(fun = mean, geom = "col", alpha = 0.5, width = 0.4)+
  stat_summary(fun.data = mean_se, geom = "errorbar", width = 0.2)+
  coord_cartesian(ylim = c(0,10))

6a2f5b0972e5ddd1c7f72f325c0c388b.png

对图的各种细节进行设置,如坐标轴上变量的顺序、变量名称、字体、填充颜色等等,谷歌一下就可以搜到具体代码。在此推荐一个我常借鉴的回答: https://www.datanovia.com/en/blog/ggplot-legend-title-position-and-labels/
另:两个连续变量可做散点图,线性图,热力图等,参考 Data Skills for Reproducible Science 3https://psyteachr.github.io/msc-data-skills/ggplot.html

5. 常用统计分析


在 tidy_data2 数据集基础上添加回 orientation,并计算 scores 均值。
tidy_data3 数据集如下:

933932bd70f0799a8fb087bdfc893bb1.png


1)t检验:比较 social class 中 working 和 upper 的差异。t.test(ave~social_class, data = tidy_data2)
2)一般线性模型:分析 social class 与 orientation 在 ave 上的交互作用
可以用方差分析完成,也可以用一般线性模型。lm.1 summary(lm.1)
anova(lm.1)
一般线性模型(general linear model)可以完成方差分析、线性回归分析、相关分析等,非常实用和简便。
希望本文可以为大家提供帮助!作者信息:叶梓,阿姆斯特丹自由大学社会心理学硕士,莱顿大学社会心理学博士在读。主要研究方向:情绪表达、决策行为、择偶中的吸引力、人际过程排版:郭治辰 江西师范大学心理统计与测量专业硕士在读

往期精选: 不用R也能做元分析结构方程模型:WebMASEM 实例演示 第一篇元分析 如虎添翼:用Python与C++扩展R语言的应用场景 心理学及相关领域R语言自学资料索引 用R进行多层中介的完整流程:从数据预处理到置信区间的生成

大话Python第1期——Python基础入门

5a4815cb8944c5b1b76bce3d3ada87fa.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值