小编Ani*_*yal的帖子

正则表达式只过滤大写辅音

我正在参加在线培训正则表达式课程。问题是

使用正则表达式,您可以计算匹配的数量。你能让它返回给定字符串中大写辅音(B、C、D、F、..、X、Y、Z)的数量吗?例如:它应该返回 3 和文本 ABcDeFO!。注意:仅 ASCII。我们认为 Y 是一个辅音!示例:正则表达式 /./g 在针对字符串 abc 运行时将返回 3。`

我的解决方案是/[BCDFGHJKLMNPQRSTVWXYZ]/g26个字符长)

我的另一个解决方案是/(?![AEIOU])[A-Z]/g19个字元。但根据网上统计,最短的解决方案是16个字符长。任何想法如何做到这一点?


截屏

php regex

3
推荐指数
1
解决办法
1415
查看次数

我们实际上可以将两组多个变量传递到 dplyr 中的 mutate 中吗

这个问题虽然有三个答案,但在我思考这个问题时却引起了我的怀疑。虽然我知道问题可以通过其他方法解决(特别是使用 purrr 或应用函数组),但我不确定它实际上可以通过吗mutate(across(...?为了清楚起见,我在这里重现这个问题。注意:我不是在寻找它的答案,而是只是对我的疑问的答案是否两组变量实际上可以通过 mutate/across 传递

有两组变量(一组没有后缀,一组有后缀avail)。

df <- tibble(a = c(0, 1, 0, 0, 0),
       a_avail = c(1, 1, 1, 0, 0),
       b = c(1, 1, 1, 0, 0),
       b_avail = c(1, 0, 0, 1, 0))
# A tibble: 5 x 4
      a a_avail     b b_avail
  <dbl>   <dbl> <dbl>   <dbl>
1     0       1     1       1
2     1       1     1       0
3     0       1     1       0
4     0       0     0       1
5     0       0     0       0 …
Run Code Online (Sandbox Code Playgroud)

r dplyr across

3
推荐指数
1
解决办法
957
查看次数

如何在 dplyr::across 中的 .names 参数内使用字符串操作函数

虽然我试图搜索它是否重复,但我找不到类似的问题。(虽然有类似的,但和我的要求有些不同)

我的问题是,我们是否可以使用字符串操作函数,substr例如. 作为一个可重现的例子,考虑这个stringr::str_remove.namesdplyr::across

library(dplyr)
iris %>%
  summarise(across(starts_with('Sepal'), mean, .names = '{.col}_mean'))

  Sepal.Length_mean Sepal.Width_mean
1          5.843333         3.057333
Run Code Online (Sandbox Code Playgroud)

现在我的问题是我想重命名输出列,str_remove(.col, 'Sepal')以便我的输出列名称只是Length.meanWidth.mean。我为什么问这个问题,因为这个论点的描述表明

.names
描述如何命名输出列的粘合规范。这可以使用 {.col} 代表选定的列名称,并使用 {.fn} 代表正在应用的函数的名称。默认值 (NULL) 相当于单函数情况下的“{.col}”,以及列表用于 .fns 的情况下的“{.col}_{.fn}”。

我尝试了很多可能性,包括以下内容,但这些都不起作用

library(tidyverse)
library(glue)
iris %>%
  summarise(across(starts_with('Sepal'), mean, 
                   .names = glue('{xx}_mean', xx = str_remove(.col, 'Sepal'))))

Error: Problem with `summarise()` input `..1`.
x argument `str` should be a character vector (or an object coercible to)
i Input `..1` is …
Run Code Online (Sandbox Code Playgroud)

r dplyr across r-glue

3
推荐指数
1
解决办法
436
查看次数

将冒号和等号分隔的字符串拆分为 R 中的不同列

我有一个 dataframe ,其中一列包含冒号和等号分隔的字符串。

data$col1
  [1] "ECNT=2;HCNT=4;MAX_ED=51;MIN_ED=51;NLOD=38.78;TLOD=5.45"  
  [2] "ECNT=2;HCNT=8;MAX_ED=51;MIN_ED=51;NLOD=36.58;TLOD=4.05"  
  [3] "DB;ECNT=1;HCNT=16;MAX_ED=.;MIN_ED=.;NLOD=20.42;TLOD=5.82"
  [4] "DB;ECNT=1;HCNT=4;MAX_ED=.;MIN_ED=.;NLOD=30.70;TLOD=8.03" 
  [5] "ECNT=2;HCNT=6;MAX_ED=7;MIN_ED=7;NLOD=41.48;TLOD=5.37"    
  [6] "ECNT=2;HCNT=9;MAX_ED=7;MIN_ED=7;NLOD=40.59;TLOD=5.29" 
Run Code Online (Sandbox Code Playgroud)

我想提取NLOD=和后面的数字TLOD=,然后将其分成两列。这是我想要的输出。

data
                                                        col1     TLOD      NLOD
    "ECNT=2;HCNT=4;MAX_ED=51;MIN_ED=51;NLOD=38.78;TLOD=5.45"     5.45     38.78
    "ECNT=2;HCNT=8;MAX_ED=51;MIN_ED=51;NLOD=36.58;TLOD=4.05"     4.05     36.58
  "DB;ECNT=1;HCNT=16;MAX_ED=.;MIN_ED=.;NLOD=20.42;TLOD=5.82"     5.82     20.42
   "DB;ECNT=1;HCNT=4;MAX_ED=.;MIN_ED=.;NLOD=30.70;TLOD=8.03"     8.03     30.70
      "ECNT=2;HCNT=6;MAX_ED=7;MIN_ED=7;NLOD=41.48;TLOD=5.37"     5.37     41.48
      "ECNT=2;HCNT=9;MAX_ED=7;MIN_ED=7;NLOD=40.59;TLOD=5.29"     5.29     40.59
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏。谢谢你。

可重现的样本数据

structure(list(col1 = c("ECNT=2;HCNT=4;MAX_ED=51;MIN_ED=51;NLOD=38.78;TLOD=5.45", 
"ECNT=2;HCNT=8;MAX_ED=51;MIN_ED=51;NLOD=36.58;TLOD=4.05", "DB;ECNT=1;HCNT=16;MAX_ED=.;MIN_ED=.;NLOD=20.42;TLOD=5.82", 
"DB;ECNT=1;HCNT=4;MAX_ED=.;MIN_ED=.;NLOD=30.70;TLOD=8.03", "ECNT=2;HCNT=6;MAX_ED=7;MIN_ED=7;NLOD=41.48;TLOD=5.37", 
"ECNT=2;HCNT=9;MAX_ED=7;MIN_ED=7;NLOD=40.59;TLOD=5.29")), row.names = c(NA, 
-6L), class = c("tbl_df", "tbl", "data.frame"))
Run Code Online (Sandbox Code Playgroud)

regex r

2
推荐指数
1
解决办法
66
查看次数

我们可以在 tidyverse 中同时创建/改变几个新列吗

让我澄清一下,我在这里不是在查看语法mutate_atmutate(across(..., ...))类型。我只想知道如何在 tidyverse 管道语法中一次创建多个新列。

让我们假设数据集的情况iris

我想创建 10 个(或 100 个或更多)具有这样的标准的新列。

  • 第一个新列(变量)说的V1Petal.Length * 1
  • 第二位新上校说V2的是Petal.Length * 2
  • 等等等等V10 Petal.Length * 10

无需明确编写每个列的名称和公式,如果我想创建 100 个新列,这可能会很麻烦。

r purrr tidyverse

1
推荐指数
1
解决办法
617
查看次数

Using mutate with multiple functions

I am trying to provide two functions inside the mutate(across(where(is.factor))) to order the factor levels and drop unused levels. The code appears not to be working as expected. Where might have gone wrong?

#---- Libraries ----

library(tidyverse)

#---- Data ----

set.seed(2021)

df <- tibble(
  a1 = factor(ifelse(sign(rnorm(30))==-1, 0, 1), labels = c("No", "Yes")),
  a2 = factor(ifelse(sign(rnorm(30))==-1, 0, 1), labels = c("No", "Yes")),
  gender = gl(2, 15, labels = c("Males", "Females")),
  b2 = gl(3, 10, labels = c("Primary", "Secondary", "Tertiary", "Unknown")), …
Run Code Online (Sandbox Code Playgroud)

r tidyverse mutate across

1
推荐指数
1
解决办法
89
查看次数

使用 dplyr 中的一个 mutate_across 函数进行减法和除法

我有一个看起来像虹膜数据集的数据集。

  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa
Run Code Online (Sandbox Code Playgroud)

我想跨越 Sepal.Length:Petal.Width 用数字2减去每个值,然后将结果除以4。如何在 dplyr 中使用 mutate_across 而不是两行在一行中执行此操作?

iris %>% 
  mutate(across(c(Sepal.Length:Petal.Width), ~. -2 )) %>% 
  mutate(across(c(Sepal.Length:Petal.Width), ~. /4 )) 
Run Code Online (Sandbox Code Playgroud)

r dplyr tidyverse across

0
推荐指数
1
解决办法
66
查看次数

标签 统计

r ×6

across ×4

dplyr ×3

tidyverse ×3

regex ×2

mutate ×1

php ×1

purrr ×1

r-glue ×1