替换字符串中的换行符“\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_<18
、rating_<18
、cnt_18-29
、rating_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")))
我有一个 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_<18
、rating_<18
、cnt_18-29
、rating_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")))