我试图使用该dplyr包来选择以i开头的所有列.我有以下代码:
dat<-select(newdat1,starts_with("i"))
Run Code Online (Sandbox Code Playgroud)
并且我的数据的名称是:
> colnames(newdat)
[1] "i22" "i21" "i20" "i24"
Run Code Online (Sandbox Code Playgroud)
在这种情况下,这只是一个巧合,它们都以i开头,因为在其他情况下会有更大的变化; 因此,我想自动化这个过程.问题是我的代码使用dplyr是正确的; 但是,我遇到了包的问题,所以我想知道是否/如何用grep或grepl完成相同的任务,或者任何真正使用基础包的事情.谢谢!
我想清理这个向量,只保留数字
vec = c(" 4010 \"Filling in time budget diary\"", " 8888 \"Prob cont. preceding activity\"", " 9999 \"Missing, undecipherable\";")
Run Code Online (Sandbox Code Playgroud)
我想要的只是: 4010, 8888, 9999
我想到了类似的东西,完全匹配数字,但它不起作用.
gsub("^[[:digit:]]$", replacement = '', vec)
Run Code Online (Sandbox Code Playgroud)
谢谢
我正在尝试创建一个函数来检查向量的所有元素是否出现在字符串向量中.测试代码如下:
test_values = c("Alice", "Bob")
test_list = c("Alice,Chris,Mark", "Alice,Bob,Chris", "Alice,Mark,Zach", "Alice,Bob,Mark", "Mark,Bob,Zach", "Alice,Chris,Bob", "Mark,Chris,Zach")
Run Code Online (Sandbox Code Playgroud)
我希望这个输出FALSE TRUE FALSE TRUE FALSE TRUE FALSE.
我首先想到我能够在命令中切换|到当Alice和Bob 都在字符串中而不是当它们中的任何一个出现时,但是我无法得到正确的答案.&grepl(paste(test_values, collapse='|'), test_list)
我也不想使用命令:grepl(test_values[1], test_list) & grepl(test_values[2], test_list)因为test_values向量将动态改变(从长度0到3不等),所以我正在寻找一些可以考虑到这一点的东西.
grepl("instance|percentage", labelTest$Text)
Run Code Online (Sandbox Code Playgroud)
如果存在instance或中的任何一个,将返回true percentage。
仅当同时存在这两个术语时,我才能如何实现。
我在使用 grepl 和正则表达式时遇到困难。
这是一个小例子:
我有一个字符向量:
text <- c(
"D_Purpose__Repairs" ,
"Age" ,
"F_Job"
)
Run Code Online (Sandbox Code Playgroud)
我想选择以 D_ 或 F_ 开头的单词。所以我写:
grepl("\\>D_.+ | \\>F_.+", text)
grepl("\\D_.+ | \\F_.+", text)
grepl("\\^D_.+ | \\^F_.+", text)
Run Code Online (Sandbox Code Playgroud)
然而这会返回:
[1] FALSE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)
您能帮助我了解我做错了什么以及我应该如何纠正我的代码吗?
我们将不胜感激您的建议。
我正在尝试使用文本搜索模式grepl.问题是我的模式是一个名单列表,我的文本也是一个相同长度的文本列表.我想建立一个遍历每一行并在相应文本中搜索给定名称的循环.
编辑清楚
例如,在这个数据中:
pat <- c("mary", "john", "anthony")
text <- c("This is a long text about anthony", "This is another long text about john", "This is a final text about mary").
Run Code Online (Sandbox Code Playgroud)
我想"mary"在第一个文本中搜索,然后"john"在第二个文本中搜索,最后"anthony"在第三个文本中搜索.
我想从我的数据框中删除包含左括号"("的行.
我尝试了以下方法:
df[!grepl("(", df$Name),]
Run Code Online (Sandbox Code Playgroud)
但这并没有追查(标志
目前,我正在使用 grepl 的嵌套 ifelse 函数来检查数据框中字符串向量的匹配,例如:
# vector of possible words to match
x <- c("Action", "Adventure", "Animation")
# data
my_text <- c("This one has Animation.", "This has none.", "Here is Adventure.")
my_text <- as.data.frame(my_text)
my_text$new_column <- ifelse (
grepl("Action", my_text$my_text) == TRUE,
"Action",
ifelse (
grepl("Adventure", my_text$my_text) == TRUE,
"Adventure",
ifelse (
grepl("Animation", my_text$my_text) == TRUE,
"Animation", NA)))
> my_text$new_column
[1] "Animation" NA "Adventure"
Run Code Online (Sandbox Code Playgroud)
这对于少数元素(例如,这里的三个)来说很好,但是当可能的匹配项更大时(例如,150)我该如何返回?嵌套的 ifelse 看起来很疯狂。我知道我可以同时 grepl 多个内容,如下面的代码所示,但是这会返回一个逻辑告诉我仅字符串是否匹配,而不是哪个字符串匹配。我想知道匹配了什么(在多个匹配的情况下,任何匹配都可以。
x <- c("Action", "Adventure", "Animation")
my_text <- c("This one has Animation.", …Run Code Online (Sandbox Code Playgroud) 我希望根据条件连接两个数据帧,在本例中,一个字符串位于另一个字符串内。假设我有两个数据框,
df1 <- data.frame(fullnames=c("Jane Doe", "Mr. John Smith", "Nate Cox, Esq.", "Bill Lee III", "Ms. Kate Smith"),
ages = c(30, 51, 45, 38, 20))
fullnames ages
1 Jane Doe 30
2 Mr. John Smith 51
3 Nate Cox, Esq. 45
4 Bill Lee III 38
5 Ms. Kate Smith 20
df2 <- data.frame(lastnames=c("Doe", "Cox", "Smith", "Jung", "Smith", "Lee"),
ages=c(30, 45, 20, 28, 51, 38),
homestate=c("NJ", "CT", "MA", "RI", "MA", "NY"))
lastnames ages homestate
1 Doe 30 NJ
2 Cox 45 …Run Code Online (Sandbox Code Playgroud) 我试图将其中包含“coin”一词的数据帧的所有值替换为 0,示例数据帧如下所示:
| P1 | P2 | P3 | P4 |
|---|---|---|---|
| 0 | 3 枚硬币 | 2 | 1 |
| 2 | 4 | -2 枚金币 | 4 |
我的第一次尝试是使用一个函数来 lapply(dataframe,function),该函数有条件地检查该值是否包含字符串“coin”,然后返回 0。
我确信有更有效的方法可以做到这一点,但这是我作为 R 初学者能想到的最好方法。
我正在努力使用 grepl() 函数,如果字符串包含我正在查找的子字符串,该函数应该会返回 TRUE。但是,我很难弄清楚为什么以下代码返回 FALSE。
y = "-3 coins"
grepl(y,"coin",fixed=TRUE)
Run Code Online (Sandbox Code Playgroud)
我的问题是:当“coin”位于初始字符串中时,这个 grepl 返回 FALSE 我做错了什么,有没有更好的方法来实现我的最终目标,即用 0 替换所有包含“coin”的单元格?
非常感谢任何帮助,谢谢!