删除列表中的 S3 标签

Removing S3 labels in a list

我正在处理一个大型数据集下载数据集,最终目标是加入许多数据帧。

在过去一周左右的时间里,由于“标记”数据类型与“字符”数据类型不兼容,我一直无法加入数据框。最后,我想将我的函数映射到列表中多个数据框中的同一个变量。

每个 df 的结构如下(编辑以更改 variables/attr 名称,因为我无法共享数据)。我在这里使用的感兴趣的变量是“CODE”:

structure(list(VAR1 = structure(c(val, val, val, val, val, val), .Label = c("a", 
"b", "c", "d"), class = "factor"), ID = c(1, 
2, 3, 4, 5, 6), CODE = structure(c("c1", "c1", 
"c1", "c1", "c1", "c1"), label = "instance code", units = "-4", class = c("labelled", 
"character")), ...

我对 R/RStudio 还是比较陌生,所以我想了一会儿我的问题是整个列表的映射,但是当我选择一个元素来删除标签时,它仍然不起作用。几乎就好像 R 不知道标签在那里,尽管事实上当我使用 get_label 时,标签出现了(下面的函数)。

get_label(my.list[["my.df"]][["my.variable"]]

我尝试了以下方法(我将其展示为好像我正在使用单个变量而不是整个列表,这就是我最近几天一直在试验的方式):

  1. class函数。有趣的是,当我回电话时,它说 class 是字符;但是,当我查看数据框时,class 仍然显示“字符 [# of elements] (S3: labelled, character)”
class(my.list[["my.df"]][["my.variable"]] <- "character"
  1. remove_label函数
remove_label(my.list[["my.df"]][["my.variable"]]
  1. unclass 函数。这个一次只对一个变量起作用,但没有映射整个列表,所以我包含了我的映射代码以防在这种情况下出现问题。
## for one variable
unclass(my.list[["my.df"]][["my.variable"]])

## for entire list
my.list %>%
map_at("my.variable", ~ unclass)

## I also tried map in case it was a map_at issue--still didn't work.
  1. zap_label
zap_label(my.list[["my.df"]][["my.variable"]])
  1. 将属性设置为 null
attr(my.list[["my.df"]][["my.variable"]], "label") <- NULL
  1. as.character
as.character(my.list[["my.df"]][["my.variable"]])

有人有什么想法吗?可能是 R 中的一个错误,还是我对 R 显示的相对缺乏经验?

我也尝试过修改这些函数,以防我误解了标签,并且是值标签而不是变量标签导致了问题。不是!

感谢您的帮助!

您可以使用允许设置/删除标签的 labelled package

library(labelled)


my.df = data.frame(test = "a test")
labelled::var_label(my.df) <- list(test='a test label')

var_label(my.df$test)
#> [1] "a test label"

my.list <-list(my.df = my.df)

var_label(my.list[["my.df"]][["test"]])
#> [1] "a test label"

my.list[["my.df"]][["test"]] <- remove_labels(my.list[["my.df"]][["test"]])

var_label(my.list[["my.df"]][["test"]])
#> NULL

my.list[["my.df"]][["test"]]
#> [1] "a test"