Как удалить специальные символы, найденные в именах столбцов в R

У меня есть фрейм данных, в котором есть числовые и символьные переменные. Я масштабировал числовые столбцы в своем фрейме данных. Теперь это привело к добавлению специальных символов к именам моих числовых столбцов. Я хочу удалить эти специальные символы, но код, который я использовал, не удаляет их. Как я могу это сделать. Моя попытка ниже:

#scaling and centering data
df<-df%>%
  mutate(across(where(is.numeric), scale))

#removing the special characters in the column names
names(df) <- sub("\\[.*", "", names(df))

Специальный символ — [,1]. Предложения по использованию dplyr для решения этой проблемы приветствуются.

Возможно функция clean_names() из пакета дворник?

jared_mamrot 03.04.2023 13:25

Возможно, следует упомянуть, что у вас есть tibble, а столбец — matrix. data.frame добавит к имени столбца, например. .1, если это matrix, а tibble добавит [,1].

GKi 03.04.2023 13:55
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
99
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Я предлагаю вам решить эту проблему еще раньше в вашем конвейере. scale() возвращает матрицу, поэтому в именах столбцов появляются скобки. Измените код, как показано ниже, чтобы извлечь первый столбец этой матрицы и сохранить имена столбцов такими, какие они есть:

library(dplyr)

iris |>
  mutate(across(where(is.numeric), \(x) scale(x)[, 1]))
#>     Sepal.Length Sepal.Width Petal.Length   Petal.Width    Species
#> 1    -0.89767388  1.01560199  -1.33575163 -1.3110521482     setosa
#> 2    -1.13920048 -0.13153881  -1.33575163 -1.3110521482     setosa
#> 3    -1.38072709  0.32731751  -1.39239929 -1.3110521482     setosa
#> 4    -1.50149039  0.09788935  -1.27910398 -1.3110521482     setosa
#> 5    -1.01843718  1.24503015  -1.33575163 -1.3110521482     setosa
#> 6    -0.53538397  1.93331463  -1.16580868 -1.0486667950     setosa
#> 7    -1.50149039  0.78617383  -1.33575163 -1.1798594716     setosa
#> 8    -1.01843718  0.78617383  -1.27910398 -1.3110521482     setosa
#> 9    -1.74301699 -0.36096697  -1.33575163 -1.3110521482     setosa
#> 10   -1.13920048  0.09788935  -1.27910398 -1.4422448248     setosa
#> 11   -0.53538397  1.47445831  -1.27910398 -1.3110521482     setosa
#> 12   -1.25996379  0.78617383  -1.22245633 -1.3110521482     setosa
#> 13   -1.25996379 -0.13153881  -1.33575163 -1.4422448248     setosa
#> 14   -1.86378030 -0.13153881  -1.50569459 -1.4422448248     setosa
#> 15   -0.05233076  2.16274279  -1.44904694 -1.3110521482     setosa
#> 16   -0.17309407  3.08045544  -1.27910398 -1.0486667950     setosa
#> 17   -0.53538397  1.93331463  -1.39239929 -1.0486667950     setosa
#> 18   -0.89767388  1.01560199  -1.33575163 -1.1798594716     setosa
#> 19   -0.17309407  1.70388647  -1.16580868 -1.1798594716     setosa
#> 20   -0.89767388  1.70388647  -1.27910398 -1.1798594716     setosa
#> 21   -0.53538397  0.78617383  -1.16580868 -1.3110521482     setosa
#> 22   -0.89767388  1.47445831  -1.27910398 -1.0486667950     setosa
#> 23   -1.50149039  1.24503015  -1.56234224 -1.3110521482     setosa
#> 24   -0.89767388  0.55674567  -1.16580868 -0.9174741184     setosa
#> 25   -1.25996379  0.78617383  -1.05251337 -1.3110521482     setosa
#> 26   -1.01843718 -0.13153881  -1.22245633 -1.3110521482     setosa
#> 27   -1.01843718  0.78617383  -1.22245633 -1.0486667950     setosa
#> 28   -0.77691058  1.01560199  -1.27910398 -1.3110521482     setosa
#> 29   -0.77691058  0.78617383  -1.33575163 -1.3110521482     setosa
#> 30   -1.38072709  0.32731751  -1.22245633 -1.3110521482     setosa
#> 31   -1.25996379  0.09788935  -1.22245633 -1.3110521482     setosa
#> 32   -0.53538397  0.78617383  -1.27910398 -1.0486667950     setosa
#> 33   -0.77691058  2.39217095  -1.27910398 -1.4422448248     setosa
#> 34   -0.41462067  2.62159911  -1.33575163 -1.3110521482     setosa
#> 35   -1.13920048  0.09788935  -1.27910398 -1.3110521482     setosa
#> 36   -1.01843718  0.32731751  -1.44904694 -1.3110521482     setosa
#> 37   -0.41462067  1.01560199  -1.39239929 -1.3110521482     setosa
#> 38   -1.13920048  1.24503015  -1.33575163 -1.4422448248     setosa
#> 39   -1.74301699 -0.13153881  -1.39239929 -1.3110521482     setosa
#> 40   -0.89767388  0.78617383  -1.27910398 -1.3110521482     setosa
#> 41   -1.01843718  1.01560199  -1.39239929 -1.1798594716     setosa
#> 42   -1.62225369 -1.73753594  -1.39239929 -1.1798594716     setosa
#> 43   -1.74301699  0.32731751  -1.39239929 -1.3110521482     setosa
#> 44   -1.01843718  1.01560199  -1.22245633 -0.7862814418     setosa
#> 45   -0.89767388  1.70388647  -1.05251337 -1.0486667950     setosa
#> 46   -1.25996379 -0.13153881  -1.33575163 -1.1798594716     setosa
#> 47   -0.89767388  1.70388647  -1.22245633 -1.3110521482     setosa
#> 48   -1.50149039  0.32731751  -1.33575163 -1.3110521482     setosa
#> 49   -0.65614727  1.47445831  -1.27910398 -1.3110521482     setosa
#> 50   -1.01843718  0.55674567  -1.33575163 -1.3110521482     setosa
#> 51    1.39682886  0.32731751   0.53362088  0.2632599711 versicolor
#> 52    0.67224905  0.32731751   0.42032558  0.3944526477 versicolor
#> 53    1.27606556  0.09788935   0.64691619  0.3944526477 versicolor
#> 54   -0.41462067 -1.73753594   0.13708732  0.1320672944 versicolor
#> 55    0.79301235 -0.59039513   0.47697323  0.3944526477 versicolor
#> 56   -0.17309407 -0.59039513   0.42032558  0.1320672944 versicolor
#> 57    0.55148575  0.55674567   0.53362088  0.5256453243 versicolor
#> 58   -1.13920048 -1.50810778  -0.25944625 -0.2615107354 versicolor
#> 59    0.91377565 -0.36096697   0.47697323  0.1320672944 versicolor
#> 60   -0.77691058 -0.81982329   0.08043967  0.2632599711 versicolor
#> 61   -1.01843718 -2.42582042  -0.14615094 -0.2615107354 versicolor
#> 62    0.06843254 -0.13153881   0.25038262  0.3944526477 versicolor
#> 63    0.18919584 -1.96696410   0.13708732 -0.2615107354 versicolor
#> 64    0.30995914 -0.36096697   0.53362088  0.2632599711 versicolor
#> 65   -0.29385737 -0.36096697  -0.08950329  0.1320672944 versicolor
#> 66    1.03453895  0.09788935   0.36367793  0.2632599711 versicolor
#> 67   -0.29385737 -0.13153881   0.42032558  0.3944526477 versicolor
#> 68   -0.05233076 -0.81982329   0.19373497 -0.2615107354 versicolor
#> 69    0.43072244 -1.96696410   0.42032558  0.3944526477 versicolor
#> 70   -0.29385737 -1.27867961   0.08043967 -0.1303180588 versicolor
#> 71    0.06843254  0.32731751   0.59026853  0.7880306775 versicolor
#> 72    0.30995914 -0.59039513   0.13708732  0.1320672944 versicolor
#> 73    0.55148575 -1.27867961   0.64691619  0.3944526477 versicolor
#> 74    0.30995914 -0.59039513   0.53362088  0.0008746178 versicolor
#> 75    0.67224905 -0.36096697   0.30703027  0.1320672944 versicolor
#> 76    0.91377565 -0.13153881   0.36367793  0.2632599711 versicolor
#> 77    1.15530226 -0.59039513   0.59026853  0.2632599711 versicolor
#> 78    1.03453895 -0.13153881   0.70356384  0.6568380009 versicolor
#> 79    0.18919584 -0.36096697   0.42032558  0.3944526477 versicolor
#> 80   -0.17309407 -1.04925145  -0.14615094 -0.2615107354 versicolor
#> 81   -0.41462067 -1.50810778   0.02379201 -0.1303180588 versicolor
#> 82   -0.41462067 -1.50810778  -0.03285564 -0.2615107354 versicolor
#> 83   -0.05233076 -0.81982329   0.08043967  0.0008746178 versicolor
#> 84    0.18919584 -0.81982329   0.76021149  0.5256453243 versicolor
#> 85   -0.53538397 -0.13153881   0.42032558  0.3944526477 versicolor
#> 86    0.18919584  0.78617383   0.42032558  0.5256453243 versicolor
#> 87    1.03453895  0.09788935   0.53362088  0.3944526477 versicolor
#> 88    0.55148575 -1.73753594   0.36367793  0.1320672944 versicolor
#> 89   -0.29385737 -0.13153881   0.19373497  0.1320672944 versicolor
#> 90   -0.41462067 -1.27867961   0.13708732  0.1320672944 versicolor
#> 91   -0.41462067 -1.04925145   0.36367793  0.0008746178 versicolor
#> 92    0.30995914 -0.13153881   0.47697323  0.2632599711 versicolor
#> 93   -0.05233076 -1.04925145   0.13708732  0.0008746178 versicolor
#> 94   -1.01843718 -1.73753594  -0.25944625 -0.2615107354 versicolor
#> 95   -0.29385737 -0.81982329   0.25038262  0.1320672944 versicolor
#> 96   -0.17309407 -0.13153881   0.25038262  0.0008746178 versicolor
#> 97   -0.17309407 -0.36096697   0.25038262  0.1320672944 versicolor
#> 98    0.43072244 -0.36096697   0.30703027  0.1320672944 versicolor
#> 99   -0.89767388 -1.27867961  -0.42938920 -0.1303180588 versicolor
#> 100  -0.17309407 -0.59039513   0.19373497  0.1320672944 versicolor
#> 101   0.55148575  0.55674567   1.27004036  1.7063794137  virginica
#> 102  -0.05233076 -0.81982329   0.76021149  0.9192233541  virginica
#> 103   1.51759216 -0.13153881   1.21339271  1.1816087073  virginica
#> 104   0.55148575 -0.36096697   1.04344975  0.7880306775  virginica
#> 105   0.79301235 -0.13153881   1.15674505  1.3128013839  virginica
#> 106   2.12140867 -0.13153881   1.60992627  1.1816087073  virginica
#> 107  -1.13920048 -1.27867961   0.42032558  0.6568380009  virginica
#> 108   1.75911877 -0.36096697   1.43998331  0.7880306775  virginica
#> 109   1.03453895 -1.27867961   1.15674505  0.7880306775  virginica
#> 110   1.63835547  1.24503015   1.32668801  1.7063794137  virginica
#> 111   0.79301235  0.32731751   0.76021149  1.0504160307  virginica
#> 112   0.67224905 -0.81982329   0.87350679  0.9192233541  virginica
#> 113   1.15530226 -0.13153881   0.98680210  1.1816087073  virginica
#> 114  -0.17309407 -1.27867961   0.70356384  1.0504160307  virginica
#> 115  -0.05233076 -0.59039513   0.76021149  1.5751867371  virginica
#> 116   0.67224905  0.32731751   0.87350679  1.4439940605  virginica
#> 117   0.79301235 -0.13153881   0.98680210  0.7880306775  virginica
#> 118   2.24217198  1.70388647   1.66657392  1.3128013839  virginica
#> 119   2.24217198 -1.04925145   1.77986923  1.4439940605  virginica
#> 120   0.18919584 -1.96696410   0.70356384  0.3944526477  virginica
#> 121   1.27606556  0.32731751   1.10009740  1.4439940605  virginica
#> 122  -0.29385737 -0.59039513   0.64691619  1.0504160307  virginica
#> 123   2.24217198 -0.59039513   1.66657392  1.0504160307  virginica
#> 124   0.55148575 -0.81982329   0.64691619  0.7880306775  virginica
#> 125   1.03453895  0.55674567   1.10009740  1.1816087073  virginica
#> 126   1.63835547  0.32731751   1.27004036  0.7880306775  virginica
#> 127   0.43072244 -0.59039513   0.59026853  0.7880306775  virginica
#> 128   0.30995914 -0.13153881   0.64691619  0.7880306775  virginica
#> 129   0.67224905 -0.59039513   1.04344975  1.1816087073  virginica
#> 130   1.63835547 -0.13153881   1.15674505  0.5256453243  virginica
#> 131   1.87988207 -0.59039513   1.32668801  0.9192233541  virginica
#> 132   2.48369858  1.70388647   1.49663097  1.0504160307  virginica
#> 133   0.67224905 -0.59039513   1.04344975  1.3128013839  virginica
#> 134   0.55148575 -0.59039513   0.76021149  0.3944526477  virginica
#> 135   0.30995914 -1.04925145   1.04344975  0.2632599711  virginica
#> 136   2.24217198 -0.13153881   1.32668801  1.4439940605  virginica
#> 137   0.55148575  0.78617383   1.04344975  1.5751867371  virginica
#> 138   0.67224905  0.09788935   0.98680210  0.7880306775  virginica
#> 139   0.18919584 -0.13153881   0.59026853  0.7880306775  virginica
#> 140   1.27606556  0.09788935   0.93015445  1.1816087073  virginica
#> 141   1.03453895  0.09788935   1.04344975  1.5751867371  virginica
#> 142   1.27606556  0.09788935   0.76021149  1.4439940605  virginica
#> 143  -0.05233076 -0.81982329   0.76021149  0.9192233541  virginica
#> 144   1.15530226  0.32731751   1.21339271  1.4439940605  virginica
#> 145   1.03453895  0.55674567   1.10009740  1.7063794137  virginica
#> 146   1.03453895 -0.13153881   0.81685914  1.4439940605  virginica
#> 147   0.55148575 -1.27867961   0.70356384  0.9192233541  virginica
#> 148   0.79301235 -0.13153881   0.81685914  1.0504160307  virginica
#> 149   0.43072244  0.78617383   0.93015445  1.4439940605  virginica
#> 150   0.06843254 -0.13153881   0.76021149  0.7880306775  virginica

Created on 2023-04-03 with reprex v2.0.2

Это займет только первый столбец матрицы.

GKi 03.04.2023 14:28

Вы уже приняли ответ, но он слишком длинный для комментария. dufei прав, что вы хотите исправить это выше по течению. Кроме того, scale() возвращает матрицу, но также может принимать ее, так что вам не нужно mutate(across()). Вы можете просто сделать:

numeric_cols  <- sapply(iris, is.numeric)
iris[numeric_cols]  <- scale(iris[numeric_cols])

Я предполагаю, что это будет быстрее.

Действительно очень хороший момент! В моих тестах ваше решение почти в 10 раз быстрее, чем решение с mutate(). Мне лично нравится синтаксис Tidyverse, но это, конечно, дело вкуса.

dufei 03.04.2023 13:53

Я получаю с этим ошибку при использовании tibble, содержащего matrix (радужная оболочка не имеет матрицы).

GKi 03.04.2023 14:29

@GKi да, вы правы, это не работает, если есть табличка с матричным столбцом. Трудно предвидеть ввод, когда не публикуются некоторые примеры данных.

SamR 03.04.2023 14:48

В вашем data.frame или tibble у вас есть столбец, который является матрицей. При отображении data.frame он добавит .1, .2, ... к имени столбца для каждого столбца матрицы. В tibble он добавит [,1]. Чтобы иметь возможность переименовывать эти столбцы, вы можете преобразовать матрицу в отдельные столбцы фрейма данных, преобразовав ее в list и обратно в data.frame.

DF <- data.frame(a = 1:3, b = letters[1:3])
DF$c <- matrix(1:6, 3)
DF
#  a b c.1 c.2
#1 1 a   1   4
#2 2 b   2   5
#3 3 c   3   6

as_tibble(DF)
## A tibble: 3 × 3
#      a b     c[,1]  [,2]
#  <int> <chr> <int> <int>
#1     1 a         1     4
#2     2 b         2     5
#3     3 c         3     6

names(DF)
#[1] "a" "b" "c"

x <- as.data.frame(as.list(DF))
x
#  a b c.1 c.2
#1 1 a   1   4
#2 2 b   2   5
#3 3 c   3   6

names(x)
#[1] "a"   "b"   "c.1" "c.2"

as.tibble(x)
## A tibble: 3 × 4
#      a b       c.1   c.2
#  <int> <chr> <int> <int>
#1     1 a         1     4
#2     2 b         2     5
#3     3 c         3     6

names(as.tibble(x))
#[1] "a"   "b"   "c.1" "c.2"

NB

library(dplyr)
library(tibble)

DF <- tibble(a = 1:3, b = letters[1:3])
DF$c <- matrix(1:6, 3)

DF %>% mutate(across(where(is.numeric), scale)) #Given is question of @thole
## A tibble: 3 × 3
#  a[,1] b     c[,1]  [,2]
#  <dbl> <chr> <dbl> <dbl>
#1    -1 a        -1    -1
#2     0 b         0     0
#3     1 c         1     1


DF |> mutate(across(where(is.numeric), \(x) scale(x)[, 1])) #@dufei
## A tibble: 3 × 3
#      a b         c
#  <dbl> <chr> <dbl>
#1    -1 a        -1
#2     0 b         0
#3     1 c         1


numeric_cols  <- sapply(DF, is.numeric)  #@SamR
DF[numeric_cols]  <- scale(DF[numeric_cols])
#Error in `[<-`:
#! Can't recycle `scale(DF[numeric_cols])` (size 3) to size 2.
#Run `rlang::last_trace()` to see where the error occurred.

DF
## A tibble: 3 × 3
#      a b     c[,1]  [,2]
#  <int> <chr> <int> <int>
#1     1 a         1     4
#2     2 b         2     5
#3     3 c         3     6

Другие вопросы по теме