如何清除所有属性?
How to erase all attributes?
我想从数据中删除所有属性并应用 。然而,one_entry()
(原版)和我的 one_entry2()
都不起作用,我不明白为什么。
one_entry2 <- function(x) {
attr(x, "label") <- NULL
attr(x, "labels") <- NULL
}
> lapply(df1, one_entry2)
$`id`
NULL
$V1
NULL
$V2
NULL
$V3
NULL
我们如何做到这一点?
数据:
df1 <- setNames(data.frame(matrix(1:12, 3, 4)),
c("id", paste0("V", 1:3)))
attr(df1$V1, "labels") <- LETTERS[1:4]
attr(df1$V1, "label") <- letters[1:4]
attr(df1$V2, "labels") <- LETTERS[1:4]
attr(df1$V2, "label") <- letters[1:4]
attr(df1$V3, "labels") <- LETTERS[1:4]
attr(df1$V3, "label") <- letters[1:4]
> str(df1)
'data.frame': 3 obs. of 4 variables:
$ id: int 1 2 3
$ V1: int 4 5 6
..- attr(*, "labels")= chr "A" "B" "C" "D"
..- attr(*, "label")= chr "a" "b" "c" "d"
$ V2: int 7 8 9
..- attr(*, "labels")= chr "A" "B" "C" "D"
..- attr(*, "label")= chr "a" "b" "c" "d"
$ V3: int 10 11 12
..- attr(*, "labels")= chr "A" "B" "C" "D"
..- attr(*, "label")= chr "a" "b" "c" "d"
要删除全部属性,这个
怎么样
df1[] <- lapply(df1, function(x) { attributes(x) <- NULL; x })
str(df1)
#'data.frame': 3 obs. of 4 variables:
# $ id: int 1 2 3
# $ V1: int 4 5 6
# $ V2: int 7 8 9
# $ V3: int 10 11 12
只要所有列的类型相同(如您的示例所示),您就可以
df1[] = c(df1, recursive=TRUE)
PKPDmisc
包有一个 dplyr 友好的方式来做到这一点:
library(PKPDmisc)
df %>% strip_attributes(c("label", "labels"))
稍微简化@maurits-evers 的回答:
df1[] <- lapply(df1, as.vector)
str(df1)
#'data.frame': 3 obs. of 4 variables:
# $ id: int 1 2 3
# $ V1: int 4 5 6
# $ V2: int 7 8 9
# $ V3: int 10 11 12
(原答案由Brian Ripley教授在https://r.789695.n4.nabble.com/function-to-remove-attributes-td914615.html)
在tidyverse
世界中:
df1 <- df1 %>% mutate(across(everything(), as.vector))
和data.table
library(data.table)
# Assuming
# setDT(df1) # or
# df1 <- as.data.table(df1)
df1 <- df1[, lapply(.SD, as.vector)]
以下是一个简单的解决方案(并且不会将日期 class 转换为数字):
df1 <- data.frame(df1)
我想从数据中删除所有属性并应用 one_entry()
(原版)和我的 one_entry2()
都不起作用,我不明白为什么。
one_entry2 <- function(x) {
attr(x, "label") <- NULL
attr(x, "labels") <- NULL
}
> lapply(df1, one_entry2)
$`id`
NULL
$V1
NULL
$V2
NULL
$V3
NULL
我们如何做到这一点?
数据:
df1 <- setNames(data.frame(matrix(1:12, 3, 4)),
c("id", paste0("V", 1:3)))
attr(df1$V1, "labels") <- LETTERS[1:4]
attr(df1$V1, "label") <- letters[1:4]
attr(df1$V2, "labels") <- LETTERS[1:4]
attr(df1$V2, "label") <- letters[1:4]
attr(df1$V3, "labels") <- LETTERS[1:4]
attr(df1$V3, "label") <- letters[1:4]
> str(df1)
'data.frame': 3 obs. of 4 variables:
$ id: int 1 2 3
$ V1: int 4 5 6
..- attr(*, "labels")= chr "A" "B" "C" "D"
..- attr(*, "label")= chr "a" "b" "c" "d"
$ V2: int 7 8 9
..- attr(*, "labels")= chr "A" "B" "C" "D"
..- attr(*, "label")= chr "a" "b" "c" "d"
$ V3: int 10 11 12
..- attr(*, "labels")= chr "A" "B" "C" "D"
..- attr(*, "label")= chr "a" "b" "c" "d"
要删除全部属性,这个
怎么样df1[] <- lapply(df1, function(x) { attributes(x) <- NULL; x })
str(df1)
#'data.frame': 3 obs. of 4 variables:
# $ id: int 1 2 3
# $ V1: int 4 5 6
# $ V2: int 7 8 9
# $ V3: int 10 11 12
只要所有列的类型相同(如您的示例所示),您就可以
df1[] = c(df1, recursive=TRUE)
PKPDmisc
包有一个 dplyr 友好的方式来做到这一点:
library(PKPDmisc)
df %>% strip_attributes(c("label", "labels"))
稍微简化@maurits-evers 的回答:
df1[] <- lapply(df1, as.vector)
str(df1)
#'data.frame': 3 obs. of 4 variables:
# $ id: int 1 2 3
# $ V1: int 4 5 6
# $ V2: int 7 8 9
# $ V3: int 10 11 12
(原答案由Brian Ripley教授在https://r.789695.n4.nabble.com/function-to-remove-attributes-td914615.html)
在tidyverse
世界中:
df1 <- df1 %>% mutate(across(everything(), as.vector))
和data.table
library(data.table)
# Assuming
# setDT(df1) # or
# df1 <- as.data.table(df1)
df1 <- df1[, lapply(.SD, as.vector)]
以下是一个简单的解决方案(并且不会将日期 class 转换为数字):
df1 <- data.frame(df1)