R 对于一组固定的模式,如何检测字符串中是否存在模式?
在变量选择的上下文中,我试图计算在自举迭代中选择变量的次数。下面提供了该问题的一个简单版本,以及我的解决方案(R 对于一组固定的模式,如何检测字符串中是否存在模式?,r,multiple-columns,purrr,mutate,tidymodels,R,Multiple Columns,Purrr,Mutate,Tidymodels,在变量选择的上下文中,我试图计算在自举迭代中选择变量的次数。下面提供了该问题的一个简单版本,以及我的解决方案(answer)。但是,当处理50或100个变量时,我的解决方案很快就会变得笨拙 我有一组我想计算的变量名(pred),因此我认为应该可以基于这些值创建新列,然后检测每个列的相关字符串。但是,如果不手动设置列名并粘贴函数,我就不知道该怎么做。一定有更好的办法 欢迎任何其他解决方案,包括tidyverse或purrr library(dplyr) df <- mtcars n <
answer
)。但是,当处理50或100个变量时,我的解决方案很快就会变得笨拙
我有一组我想计算的变量名(pred
),因此我认为应该可以基于这些值创建新列,然后检测每个列的相关字符串。但是,如果不手动设置列名并粘贴函数,我就不知道该怎么做。一定有更好的办法
欢迎任何其他解决方案,包括tidyverse或purrr
library(dplyr)
df <- mtcars
n <- nrow(df)
pred <- colnames(df)[2:length(df)]
target <- "mpg"
mpg_formula <- paste(target, "~", paste(pred, collapse = "+"))
steplm <- data.frame()
bootnum <- 10
for (i in 1:bootnum) {
message("Fitting model ", i, " out of ", bootnum)
data.id <- sample(1:dim(df)[1], replace = T)
fit.lms <- step(lm(mpg_formula, data=df[data.id, ]),
direction = "backward",
trace = 0)
selected.vars <- paste(sort(names(coef(fit.lms)[-1])), collapse = ", ")
step.result <- data.frame("model" = selected.vars,
"nvar" = length(names(coef(fit.lms)[-1])))
steplm <- dplyr::bind_rows(steplm, step.result)
}
steplm %>%
transmute(
steplm %>%
transmute(
cyl = grepl(pattern = "cyl", x = model),
disp = grepl(pattern = "disp", x = model),
hp = grepl(pattern = "hp", x = model),
drat = grepl(pattern = "drat", x = model),
wt = grepl(pattern = "wt", x = model),
qsec = grepl(pattern = "qsec", x = model),
vs = grepl(pattern = "vs", x = model),
am = grepl(pattern = "am", x = model),
gear = grepl(pattern = "gear", x = model),
carb = grepl(pattern = "carb", x = model)
) -> answer
您可以使用
sapply
:
sapply(pred, grepl, steplm$model)
# cyl disp hp drat wt qsec vs am gear carb
# [1,] FALSE FALSE FALSE TRUE TRUE TRUE FALSE TRUE FALSE FALSE
# [2,] TRUE FALSE FALSE TRUE FALSE FALSE TRUE FALSE TRUE TRUE
# [3,] FALSE FALSE FALSE FALSE TRUE TRUE FALSE TRUE FALSE TRUE
# [4,] FALSE FALSE FALSE TRUE TRUE TRUE FALSE TRUE TRUE FALSE
# [5,] FALSE TRUE FALSE TRUE TRUE TRUE TRUE FALSE FALSE FALSE
# [6,] TRUE FALSE TRUE FALSE TRUE TRUE FALSE FALSE TRUE FALSE
# [7,] FALSE FALSE TRUE FALSE TRUE FALSE FALSE FALSE TRUE TRUE
# [8,] FALSE TRUE FALSE TRUE TRUE TRUE FALSE FALSE TRUE FALSE
# [9,] FALSE TRUE TRUE FALSE TRUE TRUE TRUE TRUE FALSE TRUE
#[10,] TRUE TRUE TRUE FALSE FALSE FALSE FALSE TRUE FALSE TRUE
sapply
返回一个矩阵。如果需要数据帧,可以将data.frame
包装到sapply
输出
identical(data.frame(sapply(pred, grepl, steplm$model)), answer)
#[1] TRUE
您可以使用
sapply
:
sapply(pred, grepl, steplm$model)
# cyl disp hp drat wt qsec vs am gear carb
# [1,] FALSE FALSE FALSE TRUE TRUE TRUE FALSE TRUE FALSE FALSE
# [2,] TRUE FALSE FALSE TRUE FALSE FALSE TRUE FALSE TRUE TRUE
# [3,] FALSE FALSE FALSE FALSE TRUE TRUE FALSE TRUE FALSE TRUE
# [4,] FALSE FALSE FALSE TRUE TRUE TRUE FALSE TRUE TRUE FALSE
# [5,] FALSE TRUE FALSE TRUE TRUE TRUE TRUE FALSE FALSE FALSE
# [6,] TRUE FALSE TRUE FALSE TRUE TRUE FALSE FALSE TRUE FALSE
# [7,] FALSE FALSE TRUE FALSE TRUE FALSE FALSE FALSE TRUE TRUE
# [8,] FALSE TRUE FALSE TRUE TRUE TRUE FALSE FALSE TRUE FALSE
# [9,] FALSE TRUE TRUE FALSE TRUE TRUE TRUE TRUE FALSE TRUE
#[10,] TRUE TRUE TRUE FALSE FALSE FALSE FALSE TRUE FALSE TRUE
sapply
返回一个矩阵。如果需要数据帧,可以将data.frame
包装到sapply
输出
identical(data.frame(sapply(pred, grepl, steplm$model)), answer)
#[1] TRUE
你可以考虑采用不同的方法进行引导重采样,
库(tidyverse)
图书馆(rsample)
图书馆(扫帚)
汽车后备箱自举采样
#>#A tible:100 x 2
#>拆分id
#>
#>1 Bootstrap001
#>2 Bootstrap002
#>3引导程序P003
#>4引导程序P004
#>5.开机自检P005
#>6 Bootstrap006
#>7引导程序P007
#>8 Bootstrap008
#>9 Bootstrap009
#>10 Bootstrap010
#>#…还有90行
fit_mpg#A tible:645 x 8
#>拆分id模型术语估计标准误差统计p值
#>
#>1234567810#…还有635行
启动系数%>%
选择(id,术语)%>%
过滤器(术语!=“(截取)”)%>%
变异(值=真)%>%
完成(id、术语、填充=列表(值=假))%>%
枢轴(名称从=术语,值从=值)
#>#tibble:100 x 11
#>id am carb cyl disp牵引齿轮hp qsec vs wt
#>
#>1 Bootstrap001真假假假真假假真
#>2 Bootstrap002假真假假真假假假真
#>3 Bootstrap003 TRUE FALSE FALSE FALSE TRUE FALSE TRUE
#>4 Bootstrap004假-真-假-真
#>5 Bootstrap005假-真-假-真-假-假-真
#>6 Bootstrap006假假真假假真
#>7 Bootstrap007 FALSE FALSE FALSE FALSE TRUE FALSE TRUE
#>8 Bootstrap008 FALSE FALSE TRUE FALSE TRUE FALSE TRUE
#>9 Bootstrap009真假假假真假假
#>10 Bootstrap010假真假假假假真
#>#…还有90行
>(v2.0.0)
在2021-04-07中,您可以考虑采用不同的方法进行引导重采样,库(tidyverse)
图书馆(rsample)
图书馆(扫帚)
汽车后备箱自举采样
#>#A tible:100 x 2
#>拆分id
#>
#>1 Bootstrap001
#>2 Bootstrap002
#>3引导程序P003
#>4引导程序P004
#>5.开机自检P005
#>6 Bootstrap006
#>7引导程序P007
#>8 Bootstrap008
#>9 Bootstrap009
#>10 Bootstrap010
#>#…还有90行
fit_mpg#A tible:645 x 8
#>拆分id模型术语估计标准误差统计p值
#>
#>1234567810#…还有635行
启动系数%>%
选择(id,术语)%>%
过滤器(术语!=“(截取)”)%>%
变异(值=真)%>%
完成(id、术语、填充=列表(值=假))%>%
枢轴(名称从=术语,值从=值)
#>#tibble:100 x 11
#>id am carb cyl disp牵引齿轮hp qsec vs wt
#>
#>1 Bootstrap001真假假假真假假真
#>2 Bootstrap002假真假假真假假假真
#>3 Bootstrap003 TRUE FALSE FALSE FALSE TRUE FALSE TRUE
#>4 Bootstrap004假-真-假-真
#>5 Bootstrap005假-真-假-真-假-假-真
#>6 Bootstrap006假假真假假真
#>7 Bootstrap007 FALSE FALSE FALSE FALSE TRUE FALSE TRUE
#>8 Bootstrap008 FALSE FALSE TRUE FALSE TRUE FALSE TRUE
#>9 Bootstrap009真假假假真假假
#>10 Bootstrap010假真假假假假真
#>#…还有90行
由(v2.0.0)于2021-04-07创建