當我發現以下問題時,我試圖在 R 中轉換一些資料集:我有一個顯示某些人收入的char 列(人口普查)。所以我試圖做的是標準化資料以供將來分析。這是一個資料樣本:
| 收入 |
|---|
| 2000,300 歐元 |
| 50,14 千歐元 |
| 54000 歐元 |
| 52312 歐元 |
這是我所期待的:
| 收入 |
|---|
| 2000.3 千歐元 |
| 50.14 千歐元 |
| 54 千歐元 |
| 52.31 千歐元 |
最后,這是我到目前為止得到的代碼,但它仍然無法正常作業。我是 R 的新手,我仍在尋找方法。澄清一下,在if 陳述句中,我試圖搜索所有超過 4 位數的值,但我認為搜索具有“歐元”的值更容易。但要進行操作,我相信我必須將 char 列轉換為整數 1,因此“歐元”正則運算式將無效(我相信)。
census$income <- str_replace_all(census$income, " Thousand Euros", '')
census$income <- str_replace_all(census$income, " Euros", '')
census$income <- as.integer(census$income)
if(floor(log10(census$income)) 1>4){
census$income/1000
}
census$income <- as.character(census$income)
非常感謝您的幫助!=)
uj5u.com熱心網友回復:
嵌套的解決方案sub:
dyplyr
library(dplyr)
df %>%
mutate(income = sub("(000\\s|\\sThousand\\s)?Euros", " k€",
sub(",", ".", income)))
income
1 2000.3 k€
2 50.14 k€
3 54 k€
base R:
df$income <- sub("(000\\s|\\sThousand\\s)?Euros", " k€",
sub(",", ".", df$income))
資料:
df <- data.frame(
income = c("2000,3 Thousand Euros","50,14 Thousand Euros","54000 Euros")
)
編輯:
這是更復雜資料的解決方案(根據OP的評論):
library(dplyr)
library(stringr)
df %>%
mutate(
# change comma into dot:
income = gsub(",", ".", df$income),
# remove text:
income = gsub("[ A-Za-z]", "", income),
# divide integer by 1000:
income = ifelse(str_detect(income, "^\\d $"),
as.numeric(str_extract(income, "\\d "))/1000,
income),
# add " k€":
income = paste0(income, " k€"))
資料:
df <- data.frame(
income = c("2000,3 Thousand Euros","50,14 Thousand Euros","54000 Euros", "43156 Euros")
)
uj5u.com熱心網友回復:
我認為您可以通過 和 的組合來完成此readr::parse_number操作str_detect(tolower(income), "thousand")。
census %>%
mutate(
parsed_income = if_else(
str_detect(tolower(income), "thousand"),
parse_number(income),
1000 * parse_number(income)
)
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/444466.html
