更改 tidyverse 中 tibble 列的编码

问题描述 投票:0回答:0

我有来自 MySQL 数据库的数据,它返回用十六进制编码的 latin1,格式如下:

> data
# A tibble: 52 × 4
      id code   swe_name         eng_name          
   <int> <chr>  <chr>            <chr>             
 1     0 ""     ""               ""                
 2     1 "M"    "muskel"         "muscle"          
 3     2 "L"    "lever"          "liver"           
 4     3 "N"    "njure"          "kidney"          
 5     4 "Fj"   "fj\xe4der"      "feather"         
 6     5 "Hj"   "hj\xe4rna"      "brain"           
 7     6 "\xd6" "\xf6vrigt"      "other"           
 8     7 "Ind"  "hela individen" "whole individual"
 9     8 "F"    "fett/talg"      "fat"             
10     9 "DF"   "sp\xe4ck"       "lard"            
# ℹ 42 more rows
# ℹ Use `print(n = ...)` to see more rows

我需要将列的编码设置为“latin1”。 我可以“手动”执行此操作:

for (c in colnames(data)[vapply(data, is.character, TRUE)]) {
    Encoding(data[, c, drop = TRUE]) <- "latin1" 
}

然而,这很难阅读并且感觉很笨拙。我想到使用 dplyr,可以使用

很好地选择列
data |> select_if(is.character)

data |> mutate(across(where(is.character), ...))

并且我认为可能可以使用

mutate
across
,但是
Encoding(x) <- "latin1"
并不是真正可以应用到位的函数,并且
function(x) { Encoding(x) <- "latin1" }
不起作用。

如果可能(或更好),如何使用 dplyr 和 tidyverse 来完成此操作? 因为列选择是如此方便。

r dplyr encoding tidyverse
© www.soinside.com 2019 - 2024. All rights reserved.