问题描述
我有几个变量,其数据(行)包含英语字符串,后跟非英语翻译(印地语)。
例如木匠(印地语为木匠)
是否可以将行剥离为仅包含英文部分?印地语在应用功能时引起问题,因此我希望将其删除。
解决方法
这是使用基数R的iconv()
的另一种选择,它仅删除非拉丁脚本:
s <- 'Carpenter (बढ़ई)'
iconv(s,"latin1","ASCII",sub="")
# [1] "Carpenter ()"
应用于数据框:
df <- data.frame(rbind('Carpenter (बढ़ई)','Cat (बिल्ली)'))
sapply(df,iconv,from="latin1",to="ASCII",sub="")
# [1,] "Carpenter ()"
# [2,] "Cat ()"
,
我设法通过使用正则表达式(regex)和stringr
包来去除文本的英语部分。下面是示例数据框和结果输出。
library(tidyverse)
library(stringr)
df <- tibble(
complete_wrd = c(
"carpenter (Hindi word for carpenter)","cat (Hindi word for cat)","dog (Hindi word for dog)"))
df %>%
mutate(engl_wrd = stringr::str_extract(complete_wrd,"^.*?\\S*"))
# A tibble: 3 x 2
complete_wrd engl_wrd
<chr> <chr>
1 carpenter (Hindi word for carpenter) carpenter
2 cat (Hindi word for cat) cat
3 dog (Hindi word for dog) dog
,
另一种尝试的方式
library(dplyr)
library(stringr)
df %>%
mutate(hindi_text = str_remove(hindi_text,"\\(.*\\)"))
# hindi_text
# 1 Construction Labourer
# 2 Other
数据
df <- data.frame(hindi_text = c("Construction Labourer(सभी प्रकार के निर्माण मजदूर)","Other(उपरोक्त के अतिरिक्त) "))