替换字符串中的换行符“\n”

Replace linebreak "\n" character in string

我有一个 tibble 结构如下:

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", ""))

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

最终,我想删除 \n 个字符,然后将每个包含数值的列分成两列,以 cnt_rating_ 为前缀(所以我' d 以 cnt_<18rating_<18cnt_18-29rating_18-29 等结束。

错误是因为您有一个名称为空的列,tibbles 不允许这样做。您可以使用 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")))