标签: grepl

如何在R中更改字符串的一部分

我在R中有关于字符串操作的问题.我有一个包含两列的数据框:

NAME          DATE
xxx-test-xx   2015-02-03
Frank         2015-02-01
Steve         2014-09-31
132-test-ggg  2012-12-09
Run Code Online (Sandbox Code Playgroud)

我想将包含单词"test"的NAME列中的所有案例更改为一个名称 - 例如"TEST".我准备了如下代码,但它不起作用 - 找不到合适的案例,因为它们应该是.NAME变量中的观察没有任何特定模式.你能告诉我怎么解决吗?

dataset$EMAIL <- as.character(dataset$EMAIL) 

for (i in 1:length(dataset)) {
  if(grepl("test", dataset$EMAIL[i], ignore.case=TRUE))  {
    dataset$EMAIL[i] <- "TEST"
  }
}
Run Code Online (Sandbox Code Playgroud)

string statistics replace r grepl

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

确定满足两个条件的独特观测值,然后去除R.

我的df如下:

data
   names  fruit
7   john  apple
13  john orange
14  john  apple
2   mary orange
5   mary  apple
8   mary orange
10  mary  apple
12  mary  apple
1    tom  apple
6    tom  apple
Run Code Online (Sandbox Code Playgroud)

我想做两件事.首先,计算具有苹果和橙色(即2玛丽和约翰)的独特观察的数量.

之后,我想将它们从我的数据框中删除,这样我就只剩下只有苹果的独特个体.

这就是我尝试过的

toremove<-unique(data[data$fruit=='apple' & data$fruit=='orange',"names"])  ##this part doesn't work, if it had I would have used the below code to remove the names identified
data2<-data[!data$names %in% toremove,]
Run Code Online (Sandbox Code Playgroud)

真的,我想使用grepl,因为我的真实数据比水果更复杂.这是我尝试过的(首先转换为data.table)

data1<-data.table(data1)
z<-data1[,ind := grepl('app.*? & orang.*?', fruit), by='names']  ## this works fine when i just use 'app.*?' …
Run Code Online (Sandbox Code Playgroud)

r operators grepl data.table

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

为什么在 R 中 grep 和 !grep 逻辑上不一致,而 grepl 和 !grepl 逻辑上一致?

R 函数grep!grep(NOT grep)逻辑上不一致;grepl与and !grepl(不是 grepl)不同,它们在逻辑上是一致的。

grepl返回长度等于正在搜索的项目数的逻辑向量。例如,如果在 5 项向量的项 2 和 3 中找到目标,则返回以下内容:

FALSE TRUE TRUE FALSE FALSE 
Run Code Online (Sandbox Code Playgroud)

如果grepl被 替换!grepl,则返回“相反”的逻辑结果:

TRUE FALSE FALSE TRUE TRUE 
Run Code Online (Sandbox Code Playgroud)

grep,另一方面返回找到的项目的 2 个位置的向量:2 3

!grep在同样的场景下会返回什么?按理说应该返回1 4 5,结果却返回了FALSE FALSE。那怎么可能是逻辑上一致的返回值呢?谁能解释一下吗?

r grepl

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

如何检查准确的字符串

我正在尝试将一大组单词与一列字符串相匹配。这些词必须完全匹配。

我可以一次处理一个单词,但对于多个单词我会遇到一些问题。

x = c("red", "redish", "green", "greenish")
grepl("red|green", ignore.case=TRUE, x)
Run Code Online (Sandbox Code Playgroud)

我希望它返回“红色”和“绿色”;但不偏红或偏绿。

regex r grepl

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

使用 grepl for 循环

我正在尝试使用 for 循环来遍历数据框,查看观察是否包含列中的某个字符串(即,它应该在列Content 中包含“无规律” ),并在不同的列中生成基于在结果上。

如果它确实包含由grepl函数的结果为True标识的字符串,则观察结果应在Effectrp列中包含“Permissive” ;否则,它应该说“限制性”。

我不太确定我做错了什么......任何帮助将不胜感激!

for (i in 1:nrow(ldb)){
  if (grepl('no law', ldb$Content[i], ignore.case = TRUE)) == TRUE {
    ldb$Effectrp[i] = 'Permissive'
  } else {
    lab$EffectTR[i] = 'Restrictive'
  }
}
Run Code Online (Sandbox Code Playgroud)

loops for-loop if-statement r grepl

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

如何创建一个值为 1/0 的新列,其中仅当其他两列中的值均为 1 时,新列中的值为 1?

我在 DF 中有两列,“湿”和“冷”,值分别为 1 和 0,例如:

Wet Cold
1     1
0     1
0     1
1     0
1     1
0     0
Run Code Online (Sandbox Code Playgroud)

我想创建一个新列“wet&cold”,其中仅当“wet=1”“cold=1”时,才表示“wet&cold=1”。如果其中一个或两个为 0 或不匹配,则 wet&cold=0。

我尝试使用 grep 解决问题,但没有成功。

r grepl

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

匹配后从文本中提取字符串 - regex R.

我有一个输入文字

   inputQ <- "What can I do ..my baby has rash all over. Suggest good rash cream"
Run Code Online (Sandbox Code Playgroud)

我有一份条款清单

terms <- c("diaper","cloth diaper","rash pants","rash","baby wipes","rash cream")
Run Code Online (Sandbox Code Playgroud)

我希望完全匹配其中一个术语并返回它我尝试使用for循环,但是有更好的方法

结果应该是

 rash cream
Run Code Online (Sandbox Code Playgroud)

存储在matchedTerm中

regex r grepl

-5
推荐指数
1
解决办法
146
查看次数