对许多变量进行相同的分析并绘制它们

时间:2015-04-07 06:29:26

标签: r plot statistics analysis

我的数据集由大约180个变量组成,因为我使用SPSS进行数据输入(所以我可以在SPSS中运行分析,如果我第一次尝试使用R需要太长时间/不起作用)我不得不重新编码-99和" kA"到" NA"。

所以我最终复制/粘贴recode()功能很多,添加相应的变量。必须有更智能的方法来处理这样的问题 - 对吗?

我想创建一个线图,显示我的pollees的意见,包括他们的回答的平均值。 每个民意调查被问及他/她对几个项目的意见,并按照1-10的等级对其进行评级。因此,我希望看到每个项目的平均分数,看看人们是否更倾向于同意/不同意。 (我希望这些增加的信息有助于更好地理解这个问题)。再次 - 对于这个部分大约有20个左右的问题/项目,应该有比为每个变量编写代码更聪明的方法

我也想知道我是如何得到一个有用的形状的结果,所以我可以使用最终的方法 - 最好用ggplot2作为线图绘制它们。绘图本身不应该是一个太大的问题(即使我欣赏任何提示和技巧!) - 这里的主要问题是,如何将结果数据(手段)变成一个形状,继续处理他们(创建图表,子集)是可能/容易的。到目前为止,我的工作组中的方法是(使用SPSS)复制结果,粘贴到Excel中并在那里摆弄。

1 个答案:

答案 0 :(得分:0)

如果您在SPSS中输入数据,则可以在那里定义缺失值。然后,您可以使用诸如havensjmisc之类的包来读取SPSS文件,其中缺失值会自动转换为NA

如果你想在之后做一些重新编码,你也可以从rec包中查看sjmisc,它允许一次重新编码一个完整的数据帧(所以不需要复制recode命令并且每次都用新的变量名替换。请参阅以下示例:

library(sjmisc)
data(efc)
head(efc[, 6:9])
  c82cop1 c83cop2 c84cop3 c85cop4
1       3       2       2       2
2       3       3       3       3
3       2       2       1       4
4       4       1       3       1
5       3       2       1       2
6       2       2       3       3
head(rec(efc[, 6:9], "1=10;2=20;3=30;4=40"))
  c82cop1 c83cop2 c84cop3 c85cop4
1      30      20      20      20
2      30      30      30      30
3      20      20      10      40
4      40      10      30      10
5      30      20      10      20
6      20      20      30      30

根据回答的平均值:如果我理解正确,您希望所有观察的每个问题/变量的平均值?如果是,您只需使用colMeans功能即可。来自sjmisc-package的efc数据集的示例,其中使用变量6到14(所有项目都有4项响应比例):

library(sjmisc)
data(efc)
mydf <- efc[, 6:14]
colMeans(mydf, na.rm = T)

>  c82cop1  c83cop2  c84cop3  c85cop4  c86cop5  c87cop6  c88cop7  c89cop8  c90cop9 
> 3.118757 2.024390 1.634146 1.768374 1.394678 1.288889 1.923333 2.164262 2.932432 

如果您想绘制这些平均值,只需创建一个数据框并使用ggplot,如下所示:

plot.df <- data.frame(x = as.factor(c(1:ncol(mydf))),
                      y = colMeans(mydf, na.rm = T))
ggplot(plot.df, aes(x = x, y = y)) + geom_point()

enter image description here

对于折线图,x需要为数字:

plot.df <- data.frame(x = c(1:ncol(mydf)),
                      y = colMeans(mydf, na.rm = T))
# You may want to adjust the scale for proper values
ggplot(plot.df, aes(x = x, y = y)) + 
  geom_line() + 
  scale_x_continuous(breaks = c(1:ncol(mydf)))

enter image description here