我有一个数据集,其中一些列具有特殊字符。我想清理这个数据集,并从所有列中删除这些特殊字符。列名称的子集如下:
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)
欢迎任何其他替代方法来执行此任务。
我怀疑这可能是与你的其他问题相同的问题,所以首先尝试防止这些特殊字符的创建。
如果它们是由返回矩阵的函数创建的(例如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 with reprex v2.0.2
如果您不能在管道的早期解决此问题,您可以在事实之后从矩阵中提取列,如下所示:
df |>
mutate(across(1, (x) x[,1]))
#> # A tibble: 1 × 2
#> Crorf64 ADF3
#> <dbl> <dbl>
#> 1 NaN 2