从R中的列名中删除特殊字符

xzlaal3s  于 2023-04-09  发布在  其他
关注(0)|答案(1)|浏览(190)

我有一个数据集,其中一些列具有特殊字符。我想清理此数据集,并从所有具有这些特殊字符的列中删除这些特殊字符。列名的子集如下:

Crorf64[,1]
ADF3
DF41c[,1]
AGGF3[,1]
SRGHJ

我想要的输出是:

Crorf64
ADF3
DF41c
AGGF3
SRGHJ

我尝试删除列名中包含特殊字符的部分,如下所示,使用以下答案作为指导https://stackoverflow.com/a/37801926/17054028

training%>%
  mutate(col=str_remove_all(col,"[.*"))

当我使用这个时,我得到一个错误:

Error in `mutate()`:
! Problem while computing `col = str_remove_all(col, "[.*")`.
Caused by error in `stri_replace_all_regex()`:
! argument `str` should be a character vector (or an object coercible to)

欢迎使用任何其他替代方法来执行此任务。

hi3rlvi2

hi3rlvi21#

我怀疑这可能是相同的问题,因为在你的另一个问题,所以尝试防止这些特殊字符的创建摆在首位。
如果它们是由返回矩阵的函数创建的(例如scale()),请注意[,1]实际上不是列名的一部分-它只是表明该列实际上是一个矩阵:

library(tidyverse)

df <- tibble(
  Crorf64 = 1,
  ADF3 = 2
)

# add brackets to column name
df <- df |> 
  mutate(across(1, scale))

df
#> # A tibble: 1 × 2
#>   Crorf64[,1]  ADF3
#>         <dbl> <dbl>
#> 1         NaN     2

df |> colnames()
#> [1] "Crorf64" "ADF3"

创建于2023-04-03带有reprex v2.0.2
如果你不能在你的管道中更早地解决这个问题,你可以在事实发生后从矩阵中提取列,如下所示:

df |> 
  mutate(across(1, \(x) x[,1]))
#> # A tibble: 1 × 2
#>   Crorf64  ADF3
#>     <dbl> <dbl>
#> 1     NaN     2

相关问题