标签: stringr

删除整个数据框中的句点/点

我有一个包含来自世界各地的参与者的大型数据集。其中一些参与者使用点/句号/逗号输入数据来表示千位分隔符,但 R 将它们读取为逗号,这完全扭曲了我的数据......例如 1234 变成 1,234。

我想删除所有点/句号/逗号。我的数据完全由完整数字组成,因此任何地方都不应该有任何小数。

我尝试使用 stringr,但不太明白。这是一个(我希望)可重现的示例,其中包含我的数据的一小部分样本:

structure(
  list(
    chnb = c(10L, 35L, 55L),
    B1_1_77 = c(117.586,
                4022, 4.921),
    C1_1_88 = c(NA, 2206, 1.111),
    C1_1_99 = c(6.172,
                1884, 0),
    C1_3_99 = c(5.62, 129, 0)
  ),
  row.names = c(NA,-3L),
  class = c("tbl_df",
            "tbl", "data.frame")
)
Run Code Online (Sandbox Code Playgroud)

我试过这个:

prob1 <- prob %>% str_replace_all('\\.', '')
Run Code Online (Sandbox Code Playgroud)

这给了我这个:

> prob
[1] "c(10, 35, 55)"         "c(117586, 4022, 4921)" "c(NA, 2206, 1111)"    
[4] "c(6172, 1884, 0)"      "c(562, 129, 0)"  
Run Code Online (Sandbox Code Playgroud)

它确实删除了这些点,但它给了我一个简单的列表,并且完全丢失了我的数据结构。在线搜索建议我这样做:

prob1 <- prob %>% mutate_all(list(str_replace(., '\\.', …
Run Code Online (Sandbox Code Playgroud)

r stringr dplyr

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

使用向量而不是 R 中的正则表达式从字符串中删除多个单词

我想从 R 中的字符串中删除多个单词,但想使用字符向量而不是正则表达式。

例如,如果我有字符串

"hello how are you" 
Run Code Online (Sandbox Code Playgroud)

并想删除

c("hello", "how")
Run Code Online (Sandbox Code Playgroud)

我会回来

" are you"
Run Code Online (Sandbox Code Playgroud)

我可以近距离接触str_remove()来自stringr

"hello how are you" %>% str_remove(c("hello","how"))
[1]  "how are you"   "hello  are you"
Run Code Online (Sandbox Code Playgroud)

但我需要做一些事情来将其分解为一个字符串。是否有一个函数可以一次调用完成所有这些操作?

string r vector stringr

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

使用 stringr 进行 mutate 中的字符串操作

假设我想在字符串中找到一个模式,如果该模式存在,那么我只保留该模式之前的字符串部分。我的问题是,如果模式不存在,那么它会返回NA,最终结果将是NA. 我希望它在模式不存在时返回原始字符串。

library(stringr)
library(dplyr)
unique(iris$Species)
#> [1] setosa     versicolor virginica 
#> Levels: setosa versicolor virginica

test <- iris %>%
  mutate(Species = str_sub(Species, 1, str_locate(Species, "t")[,1] ))

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

r stringr dplyr

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

在 R 中使用 AND 和 OR 布尔运算符检测字符串

我有这样的文字:

text = 'I love apple, pear, grape and peach'
Run Code Online (Sandbox Code Playgroud)

如果我想知道文本是否包含applepear。我可以执行以下操作并且工作正常:

str_detect(text,"apple|pear")
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果我想像这样使用布尔值怎么办(apple OR pear) AND (grape)。无论如何我可以把它放进去str_detect()。那可能吗?以下是工作:

str_detect(text,"(apple|pear) & (grape)" )
[1] FALSE
Run Code Online (Sandbox Code Playgroud)

我想知道这一点的原因是我想编程以将“布尔查询”转换为grepor str_detect。就像是:

str_detect(text, '(word1|word2) AND (word2|word3|word4) AND (word5|word6) AND .....')
Run Code Online (Sandbox Code Playgroud)

数量AND不一....

请没有多个解决方案str_detect

regex r stringr

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

将 tidyeval 参数转换为字符串

我在 R 中有一个...使用 tidyeval 的简单函数。是否可以将这些更改为字符串?

simple_paste <- function(...){
  my_vars <- enquos(...)
  paste(..., sep = "_x_")
}
Run Code Online (Sandbox Code Playgroud)

simple_paste(hello, world)

作为输出,我想得到"hello_x_world". 我也可以考虑使用glue函数 orstr_c代替paste,尽管我不确定这会更好。

r stringr tidyeval r-glue

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

在 R 中反转正则表达式

我有这个字符串:

[1] "19980213"    "19980214"    "19980215"    "19980216"    "19980217"    "iffi"        "geometry"   
[8] "date_consid"
Run Code Online (Sandbox Code Playgroud)

我想匹配所有不是日期而不是“date_consid”的元素。我试过

res =  grep("(?!\\d{8})|(?!date_consid)", vec, value=T)
Run Code Online (Sandbox Code Playgroud)

但我就是不能让它工作......

regex r stringr

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

在小标题的整行中搜索字符串?

我正在尝试清理来自许多不同组的样本信息表,因此我关心的治疗信息可能位于任意数量的不同列中。这是一个抽象的例子:

sample_info = tribble(
  ~id, ~could_be_here, ~or_here,    ~or_even_in_this_one,
  1,   NA,             "not_me",    "find_me_other_stuff",
  2,   "Extra_Find_Me", NA,         "diff_stuff",
  3,   NA,              "Find_me",  NA,
  4,   NA,              "not_here", "not_here_either"
)
Run Code Online (Sandbox Code Playgroud)

我想在哪里找到“find_me”1)不区分大小写,2)它可以在任何列中,3)它可以作为更大字符串的一部分。我想创建一列,判断是否在任何列中找到“find_me”,该列为 TRUE 或 FALSE。我怎样才能做到这一点?(我想过对unite所有列进行 ing,然后str_detect在混乱的情况下运行 a,但一定有一种不那么老套的方法,对吧?)

需要明确的是,我想要一个相当于 的最终小标题sample_info %>% mutate(find_me = c(TRUE, TRUE, TRUE, FALSE))

我希望在下面链接的类似情况下使用类似的东西stringr::str_detect(., regex('find_me', ignore_case = T))pmap_lgl(any(c(...) <insert logic check>))但我不确定如何将它们组合成一个兼容变异的语句。

我查看过的内容:
按行操作查看是否有任何列位于任何其他列表中

R:使用str_detect时如何忽略大小写?

在R中,检查字符串是否出现在数据帧的行中(在任何列中)

r stringr dplyr purrr tibble

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

如何删除R中字符串中特定字符后的n个字符?

我的数据框是:

df <- data.frame(player = c("Taiwo Awoniyi/e5478b87", "Jacob Bruun Larsen/4e204552", "Andi Zeqiri/d01231f0"), goals = c(2,5,7))
Run Code Online (Sandbox Code Playgroud)

我想删除“玩家”列中“/”后面的所有数字。理想情况下拥有:

df <- data.frame(player = c("Taiwo Awoniyi", "Jacob Bruun Larsen", "Andi Zeqiri"), goals = c(2,5,7))
Run Code Online (Sandbox Code Playgroud)

我不确定如何解决这个问题,因为玩家姓名的长度差异很大,而且有些数字比其他数字大。

r stringr

4
推荐指数
2
解决办法
945
查看次数

stringr::str_starts 在不应该返回 TRUE 时返回 TRUE

我试图检测字符串是否以提供的字符串开头(用 | 分隔)

name = "KKSWAP"
stringr::str_starts(name, "RTT|SWAP")
Run Code Online (Sandbox Code Playgroud)

返回 TRUE,但是

str_starts(name, "SWAP|RTT")
Run Code Online (Sandbox Code Playgroud)

返回假

这种行为似乎是错误的,因为 KKSWAP 不是以“RTT”或“SWAP”开头。我希望在上述两种情况下这都是错误的。

r stringr

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

显示列表中的相邻成员

我想根据匹配检查列表中的相邻元素。例如,在随机排序的字母列表中,我想知道 的相邻字母是什么m。我当前的解决方案是:

library(stringr)
ltrs <- sample(letters)
ltrs[(str_which(ltrs,'m')-2):(str_which(ltrs,'m')+2)]
[1] "j" "f" "m" "q" "a"
Run Code Online (Sandbox Code Playgroud)

对我来说,重复str_which()感觉没有必要。有没有更简单的方法来达到相同的结果?

indexing r stringr

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

标签 统计

r ×10

stringr ×10

dplyr ×3

regex ×2

indexing ×1

purrr ×1

r-glue ×1

string ×1

tibble ×1

tidyeval ×1

vector ×1