Удалить атрибуты из фрейма данных
У меня есть следующий dataframe (преобразованный из объекта tax_table из пакета phyloseq).
Как я могу удалить атрибуты??
str(DT2_mat)
'data.frame': 5120 obs. of 7 variables:
$ : Factor w/ 2 levels "Archaea","Bacteria": 2 2 2 2 2 2 2 2 2 2 ...
..- attr(*, "names")= chr "P11_16513" "P193_8942" "P187_9526" "P11_4543" ...
$ : Factor w/ 28 levels "Acidobacteria",..: 2 2 2 2 2 2 2 2 2 2 ...
..- attr(*, "names")= chr "P11_16513" "P193_8942" "P187_9526" "P11_4543" ...
$ : Factor w/ 60 levels "Acidimicrobiia",..: 3 3 3 3 3 3 3 3 3 3 ...
..- attr(*, "names")= chr "P11_16513" "P193_8942" "P187_9526" "P11_4543" ...
$ : Factor w/ 108 levels "Acholeplasmatales",..: 29 29 29 29 29 29 29 29 29 29 ...
..- attr(*, "names")= chr "P11_16513" "P193_8942" "P187_9526" "P11_4543" ...
$ : Factor w/ 216 levels "0319-6A21","0319-6G20",..: 58 58 58 58 58 58 58 58 58 58 ...
..- attr(*, "names")= chr "P11_16513" "P193_8942" "P187_9526" "P11_4543" ...
$ : Factor w/ 699 levels "Abiotrophia",..: 173 173 173 173 173 173 173 173 173 173 ...
..- attr(*, "names")= chr "P11_16513" "P193_8942" "P187_9526" "P11_4543" ...
$ : Factor w/ 4964 levels "Abiotrophia defectiva Score:0.87",..: 1613 1529 1449 1448 1565 1438 1563 1532 1623 1605 ...
..- attr(*, "names")= chr "P11_16513" "P193_8942" "P187_9526" "P11_4543" ...
P
3 ответа
Как правило, вы можете удалить атрибуты с помощью
attr
функцию, указав атрибут, который вы хотите удалить, и установив для него значение NULL.
Предположим, вы получили следующее:
> str(my_df)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 107 obs. of 3 variables:
$ case_no : chr "stuff" "more stuff" "other stuff" "residual stuff" ...
$ region : chr "01" "02" "03" "04" ...
$ petition : chr "RC" "RD" "RM" "RC" ...
- attr(*, "label")= chr "NLRB7799"
Вы можете удалить этикетку с помощью
attr(my_df, "label") <- NULL
И избавьтесь от ненужных лишних классов, указав нужный с помощью
attr(my_df, "class") <- "data.frame"
У меня это хорошо сработало. Атрибуты помечаются много раз при импорте данных из другого программного обеспечения, такого как SAS или Stata. Я не люблю их, потому что они создают проблемы при слиянии или привязке к другим фреймам данных. Надеюсь, другие сочтут этот метод полезным.
На самом деле падение уровней удаляет все атрибуты.
> str(droplevels.data.frame(DT2_mat))
'data.frame': 5120 obs. of 7 variables:
$ : Factor w/ 2 levels "Archaea","Bacteria": 2 2 2 2 2 2 2 2 2 2 ...
$ : Factor w/ 28 levels "Acidobacteria",..: 2 2 2 2 2 2 2 2 2 2 ...
$ : Factor w/ 60 levels "Acidimicrobiia",..: 3 3 3 3 3 3 3 3 3 3 ...
$ : Factor w/ 108 levels "Acholeplasmatales",..: 29 29 29 29 29 29 29 29 29 29 ...
$ : Factor w/ 216 levels "0319-6A21","0319-6G20",..: 58 58 58 58 58 58 58 58 58 58 ...
$ : Factor w/ 699 levels "Abiotrophia",..: 173 173 173 173 173 173 173 173 173 173 ...
$ : Factor w/ 4964 levels "Abiotrophia defectiva Score:0.87",..: 1613 1529 1449 1448 1565 1438 1563 1532 1623 1605 ...
У меня только что возникла эта проблема, и я решил ее, используяdata.frame
функция на старом кадре данных. Хотя этот метод удалит все атрибуты.
my_dataframe <- iris
attr(my_dataframe, "test") <- 1:10
str(my_dataframe) # See the attr
#> 'data.frame': 150 obs. of 5 variables:
#> $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
#> $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
#> $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
#> $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
#> $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
#> - attr(*, "test")= int [1:10] 1 2 3 4 5 6 7 8 9 10
my_dataframe |> #The attr is gone
data.frame() |>
str()
#> 'data.frame': 150 obs. of 5 variables:
#> $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
#> $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
#> $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
#> $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
#> $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...