将空白添加到r

时间:2020-10-08 16:31:57

标签: r stringr

我正在尝试在数据框中的部分项上使用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

我只想在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<-"

是否有做空方法?我可以想到几种绕行方式,但简短的介绍会很好。谢谢!

3 个答案:

答案 0 :(得分:1)

这是您要找的吗?

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

答案 1 :(得分:1)

这是一种有效的方法。

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"

让我们知道这是否是您想要的。

答案 2 :(得分:1)

我们可以使用def build_param_array(ranges): r = ranges[0] if len(ranges) == 1: return [[p * r[2]] for p in range(r[0], r[1], -1 if r[1] < r[0] else 1)] res = [] for p in range(r[0], r[1], -1 if r[1] < r[0] else 1): pa = build_param_array(ranges[1:]) for a in pa: res.append([p * r[2]] + a) return res # range = (start, stop, scale) ranges = [(1, 5, 1), (0, 10, .1), (15, 10, .2) ] params = build_param_array(ranges) for p in params: doFunction(*p) 中的sub

base R
相关问题