Get the characters after a certain pattern in R - regex
I have a data frame with one column:
df <- data.frame(cat = c("c(\"BPT\", "BP")", "c("BP2", "BP")", "c("BPT", "BP")", "c("CN", "NC")"))
df$cat <- as.character(df$cat)
df$cat
How can I extract the characters that appear after c(", sometimes there is only one backslash and sometimes there's 2. Similarly with the characters, sometimes the characters are 2 and sometimes they are 3. e.g. BP2, BP etc.
So far I have tried:
substr(x = df$cat, start = 4, stop = 6)
But this results in:
""BP" "BP2" "BPT" "CN""
And I only want the output to show
"BPT" "BP2" "BPT" "CN"
regex string rstudio text-extraction
|
show 3 more comments
I have a data frame with one column:
df <- data.frame(cat = c("c(\"BPT\", "BP")", "c("BP2", "BP")", "c("BPT", "BP")", "c("CN", "NC")"))
df$cat <- as.character(df$cat)
df$cat
How can I extract the characters that appear after c(", sometimes there is only one backslash and sometimes there's 2. Similarly with the characters, sometimes the characters are 2 and sometimes they are 3. e.g. BP2, BP etc.
So far I have tried:
substr(x = df$cat, start = 4, stop = 6)
But this results in:
""BP" "BP2" "BPT" "CN""
And I only want the output to show
"BPT" "BP2" "BPT" "CN"
regex string rstudio text-extraction
2
Trylapply(gsub('\', '', df$cat, fixed=TRUE), function(x) eval(parse(text=x)))
– Wiktor Stribiżew
Nov 13 '18 at 13:55
Orgsub('^c\(|\)$|\\(")', '\1', df$cat)
– Wiktor Stribiżew
Nov 13 '18 at 14:00
Thanks @WiktorStribiżew. I tried both, the first one outputs both the texts - BPT and BP. The 2nd piece is also outputting both and I only need one - the first one
– Syed
Nov 13 '18 at 14:08
1
Maybelapply(gsub('\', '', df$cat, fixed=TRUE), function(x) eval(parse(text=x))[[1]])
? Orunlist(lapply(gsub('\', '', df$cat, fixed=TRUE), function(x) eval(parse(text=x))[[1]]))
? See ideone.com/xImbjP
– Wiktor Stribiżew
Nov 13 '18 at 14:13
Just let know if the firstBP
in your expected output is a typo or not, I understand you need"BPT" "BP2" "BPT" "CN"
and not"BP" "BP2" "BPT" "CN"
– Wiktor Stribiżew
Nov 13 '18 at 14:21
|
show 3 more comments
I have a data frame with one column:
df <- data.frame(cat = c("c(\"BPT\", "BP")", "c("BP2", "BP")", "c("BPT", "BP")", "c("CN", "NC")"))
df$cat <- as.character(df$cat)
df$cat
How can I extract the characters that appear after c(", sometimes there is only one backslash and sometimes there's 2. Similarly with the characters, sometimes the characters are 2 and sometimes they are 3. e.g. BP2, BP etc.
So far I have tried:
substr(x = df$cat, start = 4, stop = 6)
But this results in:
""BP" "BP2" "BPT" "CN""
And I only want the output to show
"BPT" "BP2" "BPT" "CN"
regex string rstudio text-extraction
I have a data frame with one column:
df <- data.frame(cat = c("c(\"BPT\", "BP")", "c("BP2", "BP")", "c("BPT", "BP")", "c("CN", "NC")"))
df$cat <- as.character(df$cat)
df$cat
How can I extract the characters that appear after c(", sometimes there is only one backslash and sometimes there's 2. Similarly with the characters, sometimes the characters are 2 and sometimes they are 3. e.g. BP2, BP etc.
So far I have tried:
substr(x = df$cat, start = 4, stop = 6)
But this results in:
""BP" "BP2" "BPT" "CN""
And I only want the output to show
"BPT" "BP2" "BPT" "CN"
regex string rstudio text-extraction
regex string rstudio text-extraction
edited Nov 13 '18 at 15:35
Syed
asked Nov 13 '18 at 13:47
SyedSyed
8310
8310
2
Trylapply(gsub('\', '', df$cat, fixed=TRUE), function(x) eval(parse(text=x)))
– Wiktor Stribiżew
Nov 13 '18 at 13:55
Orgsub('^c\(|\)$|\\(")', '\1', df$cat)
– Wiktor Stribiżew
Nov 13 '18 at 14:00
Thanks @WiktorStribiżew. I tried both, the first one outputs both the texts - BPT and BP. The 2nd piece is also outputting both and I only need one - the first one
– Syed
Nov 13 '18 at 14:08
1
Maybelapply(gsub('\', '', df$cat, fixed=TRUE), function(x) eval(parse(text=x))[[1]])
? Orunlist(lapply(gsub('\', '', df$cat, fixed=TRUE), function(x) eval(parse(text=x))[[1]]))
? See ideone.com/xImbjP
– Wiktor Stribiżew
Nov 13 '18 at 14:13
Just let know if the firstBP
in your expected output is a typo or not, I understand you need"BPT" "BP2" "BPT" "CN"
and not"BP" "BP2" "BPT" "CN"
– Wiktor Stribiżew
Nov 13 '18 at 14:21
|
show 3 more comments
2
Trylapply(gsub('\', '', df$cat, fixed=TRUE), function(x) eval(parse(text=x)))
– Wiktor Stribiżew
Nov 13 '18 at 13:55
Orgsub('^c\(|\)$|\\(")', '\1', df$cat)
– Wiktor Stribiżew
Nov 13 '18 at 14:00
Thanks @WiktorStribiżew. I tried both, the first one outputs both the texts - BPT and BP. The 2nd piece is also outputting both and I only need one - the first one
– Syed
Nov 13 '18 at 14:08
1
Maybelapply(gsub('\', '', df$cat, fixed=TRUE), function(x) eval(parse(text=x))[[1]])
? Orunlist(lapply(gsub('\', '', df$cat, fixed=TRUE), function(x) eval(parse(text=x))[[1]]))
? See ideone.com/xImbjP
– Wiktor Stribiżew
Nov 13 '18 at 14:13
Just let know if the firstBP
in your expected output is a typo or not, I understand you need"BPT" "BP2" "BPT" "CN"
and not"BP" "BP2" "BPT" "CN"
– Wiktor Stribiżew
Nov 13 '18 at 14:21
2
2
Try
lapply(gsub('\', '', df$cat, fixed=TRUE), function(x) eval(parse(text=x)))
– Wiktor Stribiżew
Nov 13 '18 at 13:55
Try
lapply(gsub('\', '', df$cat, fixed=TRUE), function(x) eval(parse(text=x)))
– Wiktor Stribiżew
Nov 13 '18 at 13:55
Or
gsub('^c\(|\)$|\\(")', '\1', df$cat)
– Wiktor Stribiżew
Nov 13 '18 at 14:00
Or
gsub('^c\(|\)$|\\(")', '\1', df$cat)
– Wiktor Stribiżew
Nov 13 '18 at 14:00
Thanks @WiktorStribiżew. I tried both, the first one outputs both the texts - BPT and BP. The 2nd piece is also outputting both and I only need one - the first one
– Syed
Nov 13 '18 at 14:08
Thanks @WiktorStribiżew. I tried both, the first one outputs both the texts - BPT and BP. The 2nd piece is also outputting both and I only need one - the first one
– Syed
Nov 13 '18 at 14:08
1
1
Maybe
lapply(gsub('\', '', df$cat, fixed=TRUE), function(x) eval(parse(text=x))[[1]])
? Or unlist(lapply(gsub('\', '', df$cat, fixed=TRUE), function(x) eval(parse(text=x))[[1]]))
? See ideone.com/xImbjP– Wiktor Stribiżew
Nov 13 '18 at 14:13
Maybe
lapply(gsub('\', '', df$cat, fixed=TRUE), function(x) eval(parse(text=x))[[1]])
? Or unlist(lapply(gsub('\', '', df$cat, fixed=TRUE), function(x) eval(parse(text=x))[[1]]))
? See ideone.com/xImbjP– Wiktor Stribiżew
Nov 13 '18 at 14:13
Just let know if the first
BP
in your expected output is a typo or not, I understand you need "BPT" "BP2" "BPT" "CN"
and not "BP" "BP2" "BPT" "CN"
– Wiktor Stribiżew
Nov 13 '18 at 14:21
Just let know if the first
BP
in your expected output is a typo or not, I understand you need "BPT" "BP2" "BPT" "CN"
and not "BP" "BP2" "BPT" "CN"
– Wiktor Stribiżew
Nov 13 '18 at 14:21
|
show 3 more comments
1 Answer
1
active
oldest
votes
You may use
df <- data.frame(cat = c("c(\"BPT\", "BP")", "c("BP2", "BP")", "c("BPT", "BP")", "c("CN", "NC")"))
df$cat <- as.character(df$cat)
unlist(lapply(gsub('\', '', df$cat, fixed=TRUE), function(x) eval(parse(text=x))[[1]]))
## => [1] "BPT" "BP2" "BPT" "CN"
See the R demo online.
Notes
gsub('\', '', df$cat, fixed=TRUE)
removes all backslashes. You may usegsub('\"', '"', df$cat, fixed=TRUE)
if you only plan to remove backslashes before"
.eval(parse(text=x))[[1]]
parses the vector and returns the first itemlapply
helps traverse the whole data you have. See Using sapply and lapply.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53282466%2fget-the-characters-after-a-certain-pattern-in-r-regex%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You may use
df <- data.frame(cat = c("c(\"BPT\", "BP")", "c("BP2", "BP")", "c("BPT", "BP")", "c("CN", "NC")"))
df$cat <- as.character(df$cat)
unlist(lapply(gsub('\', '', df$cat, fixed=TRUE), function(x) eval(parse(text=x))[[1]]))
## => [1] "BPT" "BP2" "BPT" "CN"
See the R demo online.
Notes
gsub('\', '', df$cat, fixed=TRUE)
removes all backslashes. You may usegsub('\"', '"', df$cat, fixed=TRUE)
if you only plan to remove backslashes before"
.eval(parse(text=x))[[1]]
parses the vector and returns the first itemlapply
helps traverse the whole data you have. See Using sapply and lapply.
add a comment |
You may use
df <- data.frame(cat = c("c(\"BPT\", "BP")", "c("BP2", "BP")", "c("BPT", "BP")", "c("CN", "NC")"))
df$cat <- as.character(df$cat)
unlist(lapply(gsub('\', '', df$cat, fixed=TRUE), function(x) eval(parse(text=x))[[1]]))
## => [1] "BPT" "BP2" "BPT" "CN"
See the R demo online.
Notes
gsub('\', '', df$cat, fixed=TRUE)
removes all backslashes. You may usegsub('\"', '"', df$cat, fixed=TRUE)
if you only plan to remove backslashes before"
.eval(parse(text=x))[[1]]
parses the vector and returns the first itemlapply
helps traverse the whole data you have. See Using sapply and lapply.
add a comment |
You may use
df <- data.frame(cat = c("c(\"BPT\", "BP")", "c("BP2", "BP")", "c("BPT", "BP")", "c("CN", "NC")"))
df$cat <- as.character(df$cat)
unlist(lapply(gsub('\', '', df$cat, fixed=TRUE), function(x) eval(parse(text=x))[[1]]))
## => [1] "BPT" "BP2" "BPT" "CN"
See the R demo online.
Notes
gsub('\', '', df$cat, fixed=TRUE)
removes all backslashes. You may usegsub('\"', '"', df$cat, fixed=TRUE)
if you only plan to remove backslashes before"
.eval(parse(text=x))[[1]]
parses the vector and returns the first itemlapply
helps traverse the whole data you have. See Using sapply and lapply.
You may use
df <- data.frame(cat = c("c(\"BPT\", "BP")", "c("BP2", "BP")", "c("BPT", "BP")", "c("CN", "NC")"))
df$cat <- as.character(df$cat)
unlist(lapply(gsub('\', '', df$cat, fixed=TRUE), function(x) eval(parse(text=x))[[1]]))
## => [1] "BPT" "BP2" "BPT" "CN"
See the R demo online.
Notes
gsub('\', '', df$cat, fixed=TRUE)
removes all backslashes. You may usegsub('\"', '"', df$cat, fixed=TRUE)
if you only plan to remove backslashes before"
.eval(parse(text=x))[[1]]
parses the vector and returns the first itemlapply
helps traverse the whole data you have. See Using sapply and lapply.
answered Nov 13 '18 at 15:22
Wiktor StribiżewWiktor Stribiżew
316k16134215
316k16134215
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53282466%2fget-the-characters-after-a-certain-pattern-in-r-regex%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
2
Try
lapply(gsub('\', '', df$cat, fixed=TRUE), function(x) eval(parse(text=x)))
– Wiktor Stribiżew
Nov 13 '18 at 13:55
Or
gsub('^c\(|\)$|\\(")', '\1', df$cat)
– Wiktor Stribiżew
Nov 13 '18 at 14:00
Thanks @WiktorStribiżew. I tried both, the first one outputs both the texts - BPT and BP. The 2nd piece is also outputting both and I only need one - the first one
– Syed
Nov 13 '18 at 14:08
1
Maybe
lapply(gsub('\', '', df$cat, fixed=TRUE), function(x) eval(parse(text=x))[[1]])
? Orunlist(lapply(gsub('\', '', df$cat, fixed=TRUE), function(x) eval(parse(text=x))[[1]]))
? See ideone.com/xImbjP– Wiktor Stribiżew
Nov 13 '18 at 14:13
Just let know if the first
BP
in your expected output is a typo or not, I understand you need"BPT" "BP2" "BPT" "CN"
and not"BP" "BP2" "BPT" "CN"
– Wiktor Stribiżew
Nov 13 '18 at 14:21