【问题标题】:Replace linebreak "\n" character in string替换字符串中的换行符“\n”字符
【发布时间】:2021-09-26 10:48:17
【问题描述】:

我有一个结构如下的小标题:

structure(list(c("All", "Males", "Females"), `All Ages` = c("8.7\n            \n                \n                    6,315", 
"8.6\n            \n                \n                    3,306", 
"8.7\n            \n                \n                    1,136"
), `<18` = c("9.5\n            \n                \n                    19", 
"9.5\n            \n                \n                    14", 
"10.0\n            \n                \n                    3"
), `18-29` = c("8.7\n            \n                \n                    1,434", 
"8.7\n            \n                \n                    1,081", 
"8.7\n            \n                \n                    330"
), `30-44` = c("8.7\n            \n                \n                    1,746", 
"8.7\n            \n                \n                    1,219", 
"8.7\n            \n                \n                    507"
), `45+` = c("8.5\n            \n                \n                    951", 
"8.4\n            \n                \n                    730", 
"8.8\n            \n                \n                    212"
)), row.names = c(NA, -3L), class = c("tbl_df", "tbl", "data.frame"
))

看起来像这样:

# A tibble: 3 x 6
  ``     `All Ages`          `<18`         `18-29`         `30-44`         `45+`        
  <chr>  <chr>               <chr>         <chr>           <chr>           <chr>        
1 All    "8.7\n            … "9.5\n      … "8.7\n        … "8.7\n        … "8.5\n      …
2 Males  "8.6\n            … "9.5\n      … "8.7\n        … "8.7\n        … "8.4\n      …
3 Femal… "8.7\n            … "10.0\n     … "8.7\n        … "8.7\n        … "8.8\n      …

我想从出现的每个单元格中删除换行符。所以我尝试了这样的事情:

df %>% mutate(`18-29` = str_replace_all(`18-29`, "\n", ""))

看看我是否可以让它只为一栏工作,但我没能做到。我尝试了很多变体(例如,将.$ 放在列名前面,只是一个.,尝试复制并粘贴在运行View(df) 后出现在每个单元格中的两个数据点之间的间隙,放置一个在\n 之前附加转义\,删除列名称周围的刻度线`,将它们替换为单个' 或双" 语音标记等),但没有一个有效。我遇到的最常见错误是Error in initialize(...) : attempt to use zero-length variable name。

最终,我想删除\n 字符,然后将每个带有数值的列分成两部分,前缀为cnt_ 和rating_(所以我最终会得到cnt_&lt;18, rating_&lt;18、cnt_18-29、rating_18-29 等)。

【问题讨论】:

  • 即,通过摆脱 \n ,您将在其中一行中拥有 "8.7 1,434" 。将它们结合起来的逻辑是什么?会是 8.71434 吗?还是?
  • 我想在空白处分开。我可以用separate 处理这个问题,只是想事先删除\n

标签: r stringr


【解决方案1】:

错误是因为您有一个名称为空的列,小标题不允许这样做。您可以使用janitor::clean_names() 使列名标准化。

str_replace_all 替换为空与使用str_remove_all 相同。

library(dplyr)
library(stringr)

df %>%
  janitor::clean_names() %>%
  mutate(x18_29 = str_remove_all(x18_29, "\n"))

要申请所有列,请使用across。

df %>%
  janitor::clean_names() %>%
  mutate(across(.fns = ~str_remove_all(., "\n")))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 2014-10-16
    • 2010-10-03
    相关资源
    最近更新 更多