此链接是解决我想要解决的问题的90%:R Split String By Delimiter in a column
以下是示例输入:
A B C
awer.ttp.net Code 554
abcd.ttp.net Code 747
asdf.ttp.net Part 554
xyz.ttp.net Part 747
期望的结果:
library(dplyr)
df = df %>% mutate(D=gsub("\\..*","",A))
A B C D
awer.ttp.net Code 554 awer
abcd.ttp.net Code 747 abcd
asdf.ttp.net Part 554 asdf
xyz.ttp.net Part 747 xyz
但是这只会在第一个点之前给你一个字符串。如果你想要以下内容怎么办?
A B C D
awer.ttp.net Code 554 ttp
abcd.ttp.net Code 747 ttp
asdf.ttp.net Part 554 ttp
xyz.ttp.net Part 747 ttp
答案 0 :(得分:1)
我们可以作为一个群体捕捉。从字符串的开头(LinearLayout
)开始匹配一个或多个不是.
([^.]+
)的字符,后跟一个^
,后跟另一组不是.
的字符作为一组(([^.]+)
)捕获的点后跟其他字符,并替换为捕获组的反向引用(\\1
)
library(dplyr)
df1 %>%
mutate(D= sub("^[^.]+\\.([^.]+)\\..*", "\\1", A))
# A B C D
#1 awer.ttp.net Code 554 ttp
#2 abcd.ttp.net Code 747 ttp
#3 asdf.ttp.net Part 554 ttp
#4 xyz.ttp.net Part 747 ttp
或使用extract
library(tidyr)
df1 %>%
extract(A, into = 'D', "^[^.]+\\.([^.]+).*", remove = FALSE)
请注意,我们不需要此{/ 1>} {/ 1}
dplyr
答案 1 :(得分:0)
您可以使用monitored_place_worker:
cron: '*/10 * * * *'
class: 'MonitoredPlacePoolWorker'
queue: default
active_job: true
函数,并将其包装在返回所需部分的函数中。
制作数据框
strsplit
我们想要使用temp <- "A B C
awer.ttp.net Code 554
abcd.ttp.net Code 747
asdf.ttp.net Part 554
xyz.ttp.net Part 747
"
df <- read.table(textConnection(temp), header=TRUE, as.is=TRUE )
函数,该函数在给定模式下拆分字符串,并返回包含具有不同字符串的向量的列表。例如:
strsplit
将其包装成一个返回指定部分的函数
strsplit("A-B-C-D", "-")
#[[1]]
#[1] "A" "B" "C" "D"
在mutate中使用我们的mystrsplit <- function(x, pattern, part=2){
return(strsplit(x, pattern)[[1]][part])
}
# Vectorize it so that it can handle vector arguments of x
mystrsplit <- Vectorize(mystrsplit, vectorize.args = "x")
函数:
mystrsplit