如何标记因子但仍保留其原始水平值 - R

2023-12-06

我将这个问题分为两部分,第一部分是一般问题,第二部分是具体问题。

首先 - 我想知道是否有一种可能的方法来标记数字因子但仍保留其原始数字级别。这特别令人困惑,因为我意识到当我们将标签参数传递给一个因子时,它就会变成该因子的级别,例如:

x<- factor(c(1,2,3, 2, 3, 1, 2), levels = c(1, 2, 3), labels = c("a", "b", "c"))
levels(x)
#[1] "a" "b" "c"
labels(x)
#[1] "1" "2" "3" "4" "5" "6" "7"

我想知道是否有一种方法,就像Stata中那样,来标记一个因素的类别。我希望能够在 x 的元素显示为“a、”b 或“c”时对 x 求和,但保留值 1、2 或 3。

其次-我问这个是因为我有一个非常大的数据集,其中包含带有数字类别的列。该数据集附带一个 xlsx 字典,我将其读取并处理为 R,因此每一列都有其数字类别及其各自的标签。我正在尝试读取字典,在列列表中创建类别和标签列表,然后读取数据集,循环遍历列并标记变量。这些标签很重要,因此我不必每次解释数据集上的内容时都查看字典。数字级别很重要,因为由于我有很多虚拟变量(是或没有变量),我希望能够对它们求和。

这是我的代码(我使用 data.table 包):

dic<- readRDS(dictionary_filename)

            # Reading data set #

              data <- fread(dataset_filename, header = T, sep = "|", encoding = "UTF-8", na.strings = c("NA", ""))

            # Treating the data.set #

                # Identifying which lines of the dictionary have categorized variables. This is very specific to my dictionary strcture #

                  index<- which(!is.na(dic$num.categoria))

                # storing the names of columns that have categorized variables #

                  names_var<- dic$`Var name`[index]
                  names_var<- names_var[!is.na(names_var)]

                # Creating a data frame with categorized variables which will be later split into lists #

                  df<- as.data.frame(dic[index,])          
                # Transforming the index column to factor so it is possible to split the data frame into a list with sublists for each categorized column #      
                  df$N<- as.factor(df$N)     
                # Splitting the data frame to list      
                  lst<- split(df, df$N)      
                # Creating a labels list and a levels list #     
                  lbs<- list()                      
                  lvs<- list()
                        for (i in 1:length(lst)){        
                      lbs[[i]]<- as.vector(lst[[i]]$category)
                      lvs[[i]]<- as.vector(lst[[i]]$category.number)              
                  }      
                # Changing the data set columns into factors with ther respective levels and labels  #      
                  k<- 1      
                  for (var in names_var){        
                      set(data, j =var, value = factor(data[[var]], levels = lvs[[k]], labels = lbs[[k]]))        
                      k<- k +1
                  }

我意识到代码有点抽象,因为我不提供数据集或字典,但这只是为了让您有一个想法。我的代码可以工作,它运行时没有错误,并且执行了我希望执行的操作(所有分类列现在都显示其标签,例如,之前为 1 或 0 时为“是”或“否”)。除了我无法再访问级别中的原始数字这一事实之外,我需要在项目的下一部分中访问原始数字。

如果有一种通用的方法可以做到这一点,那就更好了,因为我在一个函数中运行此代码,其中许多列具有不同的数据集和不同的字典。有办法做到这一点吗?

PS.:我已阅读 R 中的文档以及这些问题的答案:

因子、水平和原始值

在 R 中使用 order 函数时遇到问题

但不幸的是,我自己无法弄清楚,很明显,在“factor”中使用“labels”参数并不是完成它的方法。

太感谢了!


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何标记因子但仍保留其原始水平值 - R 的相关文章

  • 单击 R Shiny 中的按钮后将输入字段重置为 null

    我正在构建一个应用程序 用户可以在其中按列输入表的数据值 单击 添加 按钮后 输入的值将按列附加到现有值 例如 如果输入 col1 2 3 并单击 ADD 我们将在显示屏中看到 col1 2 3 如果输入 col2 4 7 并单击 ADD
  • dplyr:同一公式中全年每日值的总和以及特定每日值的总和

    Using df数据框 date lt rep as Date seq as Date 2003 01 01 as Date 2005 12 31 by 1 format Y m d 9 site lt c rep Site 1 3 109
  • R List with sub-list:将与规则匹配的所有元素提取到数组中

    我有一个 R 对象列表 它们又是各种类型的列表 我想要类别为 内部 的所有对象的 成本 值 实现这一目标的好方法是什么 如果我有一个数据框我会做类似的事情 my dataframe cost my dataframe category in
  • 在 ggplot2 上绘制世界地图

    我一直在尝试在 ggplot2 上绘制世界地图 我跟踪了电子邮件的线索 带 l 的 ggplot 地图 https stackoverflow com questions 9558040 ggplot map with l但我确实遇到了同样
  • ggplot2:图例下方的中心图例而不是面板区域

    ggplot默认情况下 图例位于面板下方居中 这在某些情况下确实令人沮丧 请看下面的例子 ggplot diamonds aes cut fill clarity geom bar coord flip theme legend posit
  • R:行数不相等的列绑定

    我有两个数据集 它们每个都有变量 ID Block 和 RT 反应时间 我想合并 列绑定这两个集合 以便我拥有一个包含变量的数据集 ID 块 RT1 RT2 问题是两个集合中的行数不相等 此外 ID 和块号匹配也很重要 缺失值应替换为 NA
  • 在 r 中的字符串内循环以输出具有向量化值的表达式

    示例数据 gt DF A B C 1 11 22 88 2 11 22 47 3 2 30 21 4 3 30 21 gt r 1 A A i B B i A A i C C i 3 B B i C C i A A i B B i C C
  • 根据特定行中的值对列重新排序。

    我在数据框中有以下数据 aa bb cc 1 3 4 5 2 5 4 3 3 7 8 6 100 33 63 55 我需要根据最后一行中的值对列重新排序 这种转变的结果将是 bb cc aa 1 4 5 3 2 4 3 5 3 8 6 7
  • 在 Rlattice xyplot 上分别控制轴刻度和轴线

    我怎样才能去除周围的盒子xyplot 同时保留轴刻度刻度线 本着爱德华 塔夫特 Edward Tufte 极简主义数据图形美学的精神 这些轴线是 非数据墨水 并且可以 应该 被 擦除 library lattice my df lt dat
  • 如何强制在较新版本的 R 上安装较旧的软件包?

    我无法安装proj4string进入我当前版本的 R 2 15 1 Warning message package proj4string is not available for R version 2 15 1 我认为这是因为 2 15
  • geom_polygon 的渐变填充

    此代码生成一个包含 3 个多边形的图表 我正在创建一个显示 3 个多边形的图表 如果有更好的方法来绘制多边形 我不太感兴趣 实际上这些多边形代表事件 并且这些事件有一个持续时间 首先 我感兴趣的是使用渐变填充每个多边形的可能性 librar
  • 为什么在 data.frame 中预先指定类型会比较慢?

    我预先分配了一个大 data frame 以便稍后填写 我通常这样做NA是这样的 n lt 1e6 a lt data frame c1 1 n c2 NA c3 NA 我想知道如果我预先指定数据类型是否会让事情变得更快 所以我测试了 f1
  • 将函数应用于矩阵列表

    我有一个矩阵列表 注意 它们的维度与此示例不同 x lt matrix 1 10 ncol 2 y lt x 300 mylist lt list x y 我想运行一个函数networklevel在矩阵列表中的每个矩阵上 该函数有各种可以计
  • R:如何将描述小时、分钟和秒的非直观字符串转换为可行的 POSIXct 格式以执行标准算术?

    我在 R 中有一个数据集 其值采用小时 分钟和秒格式 然而 有些值只有小时和分钟 有些值只有分钟和秒 有些值只有分钟 有些值只有秒 它的格式也不是很有利 样本数据如下 example lt as data frame c 22h28m 17
  • R中无法连接odbc数据库

    我一直在尝试使用以下命令将我公司的 DMS 连接到 RodbcConnect命令 但收到以下消息 myConn lt odbcConnect NZSQL uid cejacobson pwd password Warning message
  • 如何更改 r 中的树状图标签

    我在 R 中有一个树形图 它基于使用 hclust 的分层聚类 我正在对不同颜色的标签进行着色 但是当我尝试使用以下命令更改树图的标签 集群所基于的数据帧的行 时dendrogram dendrogram gt set labels dat
  • mlogit:需要 TRUE/FALSE 时缺少值

    我有来自离散选择实验 DCE 的数据 该实验研究了来自不同行业的个人的招聘偏好 我已经格式化为长格式 我想使用 mlogit 进行建模 我已导出数据 并且可以使用 asclogit 命令在 Stata 中成功运行模型 但在 R 中运行时遇到
  • 配置 fix() 和 edit() 以从 R/RStudio 在 Notepad++ 中打开

    当我在 RStudio 或 RGUI 中执行此操作时 fix SomeFunction 或使用edit 我可以在记事本中看到该函数的代码 有什么方法可以更改此设置 以便代码预览在 Notepad 中打开 而不是在普通的旧记事本中打开 同样
  • 使用 2 个向量参数翻转函数

    我想对需要 2 个向量参数的函数应用滚动 这是使用 data table 的示例 不起作用 library data table df lt as data table cbind data frame x 1 100 y 101 200
  • data.table 的包装函数

    我有一个已经使用 data frame 上下文编写的项目 为了缩短计算时间 我尝试利用 data table 的速度 我的方法是构造包装函数 读取帧 将它们转换为表 进行计算 然后转换回帧 这是一个简单的例子 FastAgg lt func

随机推荐