我在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) 我的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 函数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。那怎么可能是逻辑上一致的返回值呢?谁能解释一下吗?
我正在尝试将一大组单词与一列字符串相匹配。这些词必须完全匹配。
我可以一次处理一个单词,但对于多个单词我会遇到一些问题。
x = c("red", "redish", "green", "greenish")
grepl("red|green", ignore.case=TRUE, x)
Run Code Online (Sandbox Code Playgroud)
我希望它返回“红色”和“绿色”;但不偏红或偏绿。
我正在尝试使用 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) 我在 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 解决问题,但没有成功。
我有一个输入文字
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中
grepl ×7
r ×7
regex ×2
data.table ×1
for-loop ×1
if-statement ×1
loops ×1
operators ×1
replace ×1
statistics ×1
string ×1