如何用R移除dataframe指定列的字符值并提取数字?
解决方案:清理DataFrame指定列并提取数字
完整代码实现
# 还原原始数据框 df <- structure(list(company = c("Investments", "Debt", "Cash", "", ""), interest_rate = c("", "", "7.46", "8.44", ""), adjusted_cost = c("", "", "$", "", ""), adjusted_cost_2 = c("", "", "3,586 (EUR 3,381)", "3,564 (GBP 2,955)", "7,150"), market_value = c("", "", "$3,505 (EUR 3,578)", "3,450(GBP 3,090)", ""), market_value_2 = c("", "", "$3,505 (EUR 3,578)", "3,450(GBP 3,090)", "6,955")), row.names = c(NA, 5L), class = "data.frame") library(tidyverse) # 自定义目标列(根据实际数据修改列名) target_cols <- c("adjusted_cost", "adjusted_cost_2", "market_value", "market_value_2") # 执行清理与提取操作 cleaned_df <- df %>% mutate(across(all_of(target_cols), ~ { # 移除括号及内部所有内容 str_remove_all(., "\\s*\\(.*?\\)") %>% # 提取数字(自动忽略货币符号、千分位逗号) parse_number() })) # 按期望格式输出(空值显示为空白) print(cleaned_df, na.print = "")
关键步骤说明
- 指定目标列:
target_cols是需要处理的4列名称,可根据不同DataFrame灵活修改(比如换成c("cost", "cost_2", "value", "value_2"))。 - 移除括号内容:用正则表达式
\\s*\\(.*?\\)匹配并删除括号前的空格、括号及内部所有文本,仅保留括号外的内容。 - 提取数字:
parse_number()自动识别并提取有效数字,同时忽略货币符号(如$)、千分位逗号这类非数字字符;空字符串会转为NA,打印时通过na.print = ""显示为空白,与期望输出一致。
内容的提问来源于stack exchange,提问作者Roy
相关产品推荐
相关产品推荐

