我正在尝试在数据框中的部分项上使用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<-"
是否有做空方法?我可以想到几种绕行方式,但简短的介绍会很好。谢谢!
答案 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