将空格添加到 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"
我正在尝试对数据框中的部分项目使用 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"