R - 在字符的列中拆分字符串并保留特定结果

时间:2017-09-14 16:51:03

标签: r plyr gsub

此链接是解决我想要解决的问题的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

2 个答案:

答案 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