R-用分组数据中一个因子的水平重新编码NA

埃杜

我有一个具有纵向结构的数据框,如下所示:

df = structure(list(oslaua = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 
 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L), .Label = c("E06000001", "E06000002", 
 "E06000003", "E06000004"), class = "factor"), wave = structure(c(1L, 
 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L), .Label = c("0", 
 "1", "2", "3"), class = "factor"), old.la = structure(c(1L, 1L, 
 NA, 1L, 2L, 2L, 2L, NA, 3L, 3L, 3L, 3L, 4L, 4L, NA), .Label = c("00EB", 
 "00EC", "00EE", "00EF"), class = "factor"), la = structure(c(1L, 
 1L, NA, 1L, 2L, 2L, 2L, NA, 3L, 3L, 3L, 3L, 4L, 4L, NA), .Label = c("Hartlepool UA", 
 "Middlesbrough UA", "Redcar and Cleveland UA", "Stockton-on-Tees UA"
 ), class = "factor"), dclg.code = structure(c(1L, 1L, NA, 1L, 
 4L, 4L, 4L, NA, 3L, 3L, 3L, 3L, 2L, 2L, NA), .Label = c("H0724", 
 "H0738", "V0728", "W0734"), class = "factor"), novo_entries = c(24L, 
 4L, 0L, 1L, 35L, 15L, 1L, 0L, 49L, 7L, 2L, 2L, 40L, 14L, 0L)), .Names = c("oslaua", 
 "wave", "old.la", "la", "dclg.code", "novo_entries"), row.names = c(NA, 
 15L), class = "data.frame")

我的标识符变量是oslaua,我的时间变量是waveold.lala并且dclg.code是具有NA因子变量。我的目标包括NA使用与每个标识符(oslaua关联的每个变量的级别对my进行重新编码我尝试old.la使用以下方法来执行此操作

df = df %>% group_by(oslaua) %>% mutate(old.la.1 = ifelse(is.na(old.la), unique(old.la), old.la)) %>% as.data.frame()

我部分实现了我的目标,但是您可以看到一些问题:

> df
      oslaua wave old.la                      la dclg.code novo_entries old.la.1
1  E06000001    0   00EB           Hartlepool UA     H0724           24        1
2  E06000001    1   00EB           Hartlepool UA     H0724            4        1
3  E06000001    2   <NA>                    <NA>      <NA>            0        2
4  E06000001    3   00EB           Hartlepool UA     H0724            1        1
5  E06000002    0   00EC        Middlesbrough UA     W0734           35        2
6  E06000002    1   00EC        Middlesbrough UA     W0734           15        2
7  E06000002    2   00EC        Middlesbrough UA     W0734            1        2
8  E06000002    3   <NA>                    <NA>      <NA>            0        2
9  E06000003    0   00EE Redcar and Cleveland UA     V0728           49        3
10 E06000003    1   00EE Redcar and Cleveland UA     V0728            7        3
11 E06000003    2   00EE Redcar and Cleveland UA     V0728            2        3
12 E06000003    3   00EE Redcar and Cleveland UA     V0728            2        3
13 E06000004    0   00EF     Stockton-on-Tees UA     H0738           40        4
14 E06000004    1   00EF     Stockton-on-Tees UA     H0738           14        4
15 E06000004    2   <NA>                    <NA>      <NA>            0        4

具体而言,这些因素的水平会改变其格式,并且在某些情况下还会错误地将观测值重新编码(例如oslaua = E06000001-第3行)

我不明白为什么这些级别会更改其格式以及如何保持其原始(字母数字)格式。此外,为什么某些观察结果未正确记录。

任何解决这些问题的建议都非常感谢。

谢谢!

阿克伦

这是使用的另一种选择 data.table

library(data.table)
setDT(df)[, old.la1 := levels(droplevels(old.la)), by = oslaua]

对于多列

nm1 <-  c("old.la", "la", "dclg.code")
df1 <-  setDT(df)[, lapply(.SD, function(x) levels(droplevels(x))[1]) , 
       by = oslaua, .SDcols = nm1][df,  on = "oslaua"]
df1[, !grepl("i\\.", names(df1)), with = FALSE]

我们最初的想法是

setDT(df)[, (nm1) := lapply(.SD, function(x) 
     factor(levels(droplevels(x)))) , by = oslaua, .SDcols = nm1]

但是由于某种原因,factor在每个组中进行转换都会得到一些奇怪的输出,对于输出中的每一列都只有一个级别(使用v1.10.0)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在R中重新编码:将2个数字数据行转换为一个因子行

有关在R中同时重新编码多个因子水平的问题

R:在另一个变量的值为NA的情况下,如何将变量的值重新编码为NA

R-重新编码具有与一个代码关联的多个文本值的列

R重新分配/分配值到一个因子的水平?

数据转换:我正在寻找R中一种有效的方法来重新编码/扩展多对一生存分析

如何删除R中的一个因子水平?

在R中,是否有一种方法可以将一个数据帧中的列与另一数据帧中的值重新编码?

在 R 数据框中重新编码列数据

R:根据因子中的第一个数字对因子向量的水平进行排序

重新编码R数据帧中的多列

在 R 中重新编码以间隔进行注释的数据

R:子因子水平与另一个因子的两个水平同时发生

`na.string = na.strings=c('',' ')` 在 R 中引入了一个新的和不需要的因子水平 NA

使用 R 中一个因子的值对多个值进行归一化

R:如何一次重新编码多个变量

Dpylr的重新编码功能多对一R

R用NA分解因子的数据框

R-ggplot2-用两个因子绘制一个因子

R更改一个因子水平的变量值以表示每日因子水平的值平均值

将因子的级别重新编码为 R 中的特定数字

通过R中的数据对因子水平进行重新排序

用dplyr或forcats重新编码NA因子

当 droplevels() 在 R 中不起作用时,一个因子的下降水平

R:基于另一个变量的因子水平的新变量值

R ggpubr/ggplot2 使用斜体表示一个因子水平

用R中的两个列因子对数据帧进行重新排序

基于另一列中的值对 R 数据框中的行进行矢量化重新编码

根据另一个因子列对R数据框中的因子列进行排序