删除列表中的 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"]]
我尝试了以下方法(我将其展示为好像我正在使用单个变量而不是整个列表,这就是我最近几天一直在试验的方式):
- class函数。有趣的是,当我回电话时,它说 class 是字符;但是,当我查看数据框时,class 仍然显示“字符 [# of elements] (S3: labelled, character)”
class(my.list[["my.df"]][["my.variable"]] <- "character"
- remove_label函数
remove_label(my.list[["my.df"]][["my.variable"]]
- 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.
- zap_label
zap_label(my.list[["my.df"]][["my.variable"]])
- 将属性设置为 null
attr(my.list[["my.df"]][["my.variable"]], "label") <- NULL
- 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"
我正在处理一个大型数据集下载数据集,最终目标是加入许多数据帧。
在过去一周左右的时间里,由于“标记”数据类型与“字符”数据类型不兼容,我一直无法加入数据框。最后,我想将我的函数映射到列表中多个数据框中的同一个变量。
每个 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"]]
我尝试了以下方法(我将其展示为好像我正在使用单个变量而不是整个列表,这就是我最近几天一直在试验的方式):
- class函数。有趣的是,当我回电话时,它说 class 是字符;但是,当我查看数据框时,class 仍然显示“字符 [# of elements] (S3: labelled, character)”
class(my.list[["my.df"]][["my.variable"]] <- "character"
- remove_label函数
remove_label(my.list[["my.df"]][["my.variable"]]
- 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.
- zap_label
zap_label(my.list[["my.df"]][["my.variable"]])
- 将属性设置为 null
attr(my.list[["my.df"]][["my.variable"]], "label") <- NULL
- 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"