将空格添加到 r 中数据框的子集

Add whitespace to subset of a data frame in r

我正在尝试对数据框中的部分项目使用 str_pad。也就是说,从以下内容开始:

> d <- data.frame(q=c("all","two","a","an","each"),s=c("univ","exis","exis","exis","univ"))
> d
     q    s
1  all univ
2  two exis
3    a exis
4   an exis
5 each univ

我想将白色 space 添加到 q 中的值以“a”或“e”开头的项目。我可以使用 str_pad 和 str_subset 得到这个:

> str_pad(str_subset(d$q,"\b([ae])"),3)
[1] "all"  "  a"  " an"  "each"

但我不知道如何更改数据框中的那些项目。我可以使用 subset() 来挑选出我想要编辑的行,但我不确定如何重写该子集的部分内容,它给了我一个错误:

> subset(d,str_detect(d$q,"\b([ae])")==TRUE)
     q    s
1  all univ
3    a exis
4   an exis
5 each univ
> subset(d,str_detect(d$q,"\b([ae])")==TRUE)$q <- str_pad(str_subset(d$q,"\b([ae])"),3)
Error in subset(d, str_detect(d$q, "\b([ae])") == TRUE)$q <- str_pad(str_subset(d$q,  : 
  could not find function "subset<-"

有什么简单的方法可以做到这一点吗?我可以想到几个迂回的方式,但简短的方式会很好。谢谢!

这是您要找的吗?

library(tidyverse)
library(stringr)

d_2 <- d %>%
    dplyr::mutate(result = if_else(stringr::str_detect(q, "^a")|
                                   stringr::str_detect(q, "^e"), paste(" ", q), q))

这是一个有效的方法。

library(dplyr)
library(stringr)

d <- data.frame(q = c("all","two","a","an","each"),
           s = c("univ","exis","exis","exis","univ")) %>%
  mutate(q = ifelse(str_detect(q, '^[ae]'), paste(' ', q), q))
d$q

输出:

[1] "  all"  "two"    "  a"    "  an"   "  each"

如果这就是您要找的,请告诉我们。

我们可以使用 sub 来自 base R

d$q <- sub('^([ae])', " \1", d$q)
d$q
#[1] " all"  "two"   " a"    " an"   " each"