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)

如何打印包含多个变量的所有变量的所有信息的表格 - 特别是当没有答案时(请参阅v2level 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,然后将函数factorordered 应用于它们。如果不希望按字母顺序排列,您仍然可以自行改变列并提供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 基础知识:一次处理多个变量及其输出的主要内容,如果未能解决你的问题,请参考以下文章

python基础

python基础-文件处理与函数

R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(输出多个分组)实战

如何在 R 中对多个分类变量进行一次热编码

R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(输出多个分组自定义颜色配置)实战

R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(输出多个分组色彩配置添加数据点)实战