R 基础知识:一次处理多个变量及其输出
Posted
技术标签:
【中文标题】R 基础知识:一次处理多个变量及其输出【英文标题】:R basics: working with multiple variables at once and their output 【发布时间】:2022-01-06 04:49:10 【问题描述】:我有一个包含 40 个有序因子变量的调查数据集。数据导入时变量转换为字符。如果我错了,请纠正我,因为我想在这里使用apply function
。
在我的数据操作之下:
### data
v1 <- as.character(c(1,4,2,4,3,1,3,4,5,2,2,3,6,5,4,6,5,4,5,6,6,2,4,3,4,5,6,1,6,3,5,6,3,2,4,5,3,2,4,5,3,2,4))
v2 <- as.character(c(3,4,1,4,5,1,3,1,5,6,4,3,4,5,6,3,3,5,4,3,3,5,6,3,4,3,4,6,3,1,1,3,4,5,6,1,3,6,4,3,1,6,5))
df <- data.frame(v1,v2)
### transform into ordered factor
df$v1.f <- as.factor(df$v1)
df$v1.f <- ordered(df$v1.f, levels = c("1", "2", "3", "4", "5", "6"))
真正的关卡是未排序的字符,这就是我包含该步骤的原因。我不介意为所有变量都输入这个,但这似乎是多余的。
我的第二个问题是输出。我想创建一个精美的报告并知道如何为其生成数字:
v1.freq <- table(df$v1.f)
v1.perc <- round(prop.table(v1.freq),2)*100
v1.med <- median(df$v1)
如何打印包含多个变量的所有变量的所有信息的表格 - 特别是当没有答案时(请参阅v2
,level 2
没有响应;@ 987654326@ 只是跳过关卡)。
如何将 R 输出转换为表中的 R 输出,该表将级别作为标题,频率和百分比作为多个变量的行?
将数字复制/粘贴到 Excel 工作表中似乎 - 再次 - 不必要且容易出错。
【问题讨论】:
【参考方案1】:首先,您可能需要检查您的数据导入功能是否有stringAsFactor
选项。
然后,据我了解,您希望将变量转换为有序因子,这适用于所有因子。您可以将其包装成一个dplyr
句子,并使用forcats
来处理因子。让我们获取您的数据:
library(tidyverse)
df %>%
mutate(across(1:2, ~factor(.))) %>%
mutate(across(1:2,~ordered(.))) %>%
str()
输出:
'data.frame': 43 obs. of 2 variables:
$ v1: Ord.factor w/ 6 levels "1"<"2"<"3"<"4"<..: 1 4 2 4 3 1 3 4 5 2 ...
$ v2: Ord.factor w/ 5 levels "1"<"3"<"4"<"5"<..: 2 3 1 3 4 1 2 1 4 5 ...
如您所见,变量被转换为有序因子,水平按字母顺序排列。解释一下,mutate
是改变你的变量,across
指定你想要改变哪些变量,以及如何改变。在这里,我们要将变量1
变为2
,然后将函数factor
和ordered
应用于它们。如果不希望按字母顺序排列,您仍然可以自行改变列并提供levels
参数。
对于第二个问题,就 V2 没有级别“2”而言,与 V1 不同,您不能合并两个变量,除非您为 V2 添加一个级别为 NA。您仍然可以检查janitor::tabyl
以提供交叉频率,并为每个变量创建一个表:
library(janitor)
df2 <- df %>%
mutate(across(1:2, ~factor(.))) %>%
mutate(across(1:2,~ordered(.)))
map(df2, tabyl)
输出:
$v1
.x[[i]] n percent
1 3 0.06976744
2 7 0.16279070
3 8 0.18604651
4 10 0.23255814
5 8 0.18604651
6 7 0.16279070
$v2
.x[[i]] n percent
1 7 0.1627907
3 13 0.3023256
4 9 0.2093023
5 7 0.1627907
6 7 0.1627907
【讨论】:
谢谢!结果很完美。以上是关于R 基础知识:一次处理多个变量及其输出的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(输出多个分组)实战