【问题标题】:Apply mgsub function on whole data.frame in R在 R 中的整个 data.frame 上应用 mgsub 函数
【发布时间】:2020-01-19 19:02:18
【问题描述】:

我经常使用带有特殊字符(例如 á、ľ、š、č、ť、ž、ý、á、í、é 等)的表格。 我发现名为mgsub 的非常有用的函数可以同时进行多个字符串替换。 我在矢量方面工作得很好,但是我很难将哪个函数应用于整个数据帧。

函数mgsub是这样工作的:

library(mgsub)
mgsub::mgsub("...A čo i tam dušu dáš v tom boji divokom: Mor ty len, a voľ nebyť, ako byť otrokom.",
             pattern = c(".","A","č","š","á",":",",","ľ","ť","M"," "),
         replacement = c("","a","c","s","a","","","","t","m",""), fixed = TRUE)
[1] "acoitamdusudasvtombojidivokommortylenavonebytakobytotrokom"

但是如何将此功能应用于整个data.frame?例如在这个 data.frame 上...

my.df <- data.frame(v1 = c("...A čo i tam dušu","dáš v tom boji"),
                    v2 = c("divokom:","Mor ty len,"),
                    v3 = c("a voľ nebyť,","ako byť otrokom."))

                  v1          v2               v3
1 ...A čo i tam dušu    divokom:     a voľ nebyť,
2     dáš v tom boji Mor ty len, ako byť otrokom.

我试图应用 lapply。但它只给出错误...

data.frame(lapply(my.df, mgsub::mgsub,
                  pattern = c(".","A","č","š","á",":",",","ľ","ť","M"," "),
                  replacement = c("","a","c","s","a","","","","t","m",""), fixed = TRUE))
Error in nchar(string) : 'nchar()' requires a character vector

欢迎提出任何建议。

【问题讨论】:

  • 对于特殊字符,stringi 库中还有一个不错的函数,叫做stri_trans_general()。

标签: r replace gsub


【解决方案1】:

问题是列是factor 和mgsub 需要character 输入。根据?mgsub

string - 寻找替换的字符向量


将所有列转换为character 类

my.df[] <- lapply(my.df, as.character)

或使用type.convert

my.df <- type.convert(my.df, as.is = TRUE) 

或者在创建data.frame时使用stringsAsFactors = FALSE作为data.frame中的默认选项stringsAsFactors = TRUE

my.df <- data.frame(v1 = c("...A čo i tam dušu","dáš v tom boji"),
                    v2 = c("divokom:","Mor ty len,"),
                    v3 = c("a voľ nebyť,","ako byť otrokom."), 
         stringsAsFactors = FALSE)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 2015-07-22
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    相关资源
    最近更新 更多