Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从dataframe中提取最后一个值并删除数字?_R_Regex_Dataframe_Substring_Gsub - Fatal编程技术网

如何从dataframe中提取最后一个值并删除数字?

如何从dataframe中提取最后一个值并删除数字?,r,regex,dataframe,substring,gsub,R,Regex,Dataframe,Substring,Gsub,所以我想要这个数据帧/字符串/向量 x<-c("WB (16)","CT (14)WB (15)","NBIO (15)","CT (12)CITG-TP (17)","BK (11)PS (15)BK-AR (15)") 如何执行此操作?这将删除引号之间的数字,并选择每个字符串中的最后一个代码。我正在使用管道(%%>%%)使代码更干净 library(magrittr) # pipe operators newx <- x %>% gsub('[[:blan

所以我想要这个数据帧/字符串/向量

 x<-c("WB (16)","CT (14)WB (15)","NBIO (15)","CT (12)CITG-TP (17)","BK (11)PS (15)BK-AR (15)")

如何执行此操作?

这将删除引号之间的数字,并选择每个字符串中的最后一个代码。我正在使用管道(
%%>%%
)使代码更干净

library(magrittr)  # pipe operators
newx <- 
  x %>% 
  gsub('[[:blank:]]\\([[:digit:]]*\\)', ';', .) %>%  # change all " (NN)" to ";"
  strsplit(split = ';') %>%                          # split the strings into a list
  lapply(rev) %>%                                    # revert the order
  lapply('[[', 1) %>%                                # select first element
  unlist()                                           # change back to vector

> newx
[1] "WB"      "WB"      "NBIO"    "CITG-TP" "BK-AR"  
library(magrittr)#管道操作符
新x%
gsub(“[:blank:][]\\”([[:digit:][]*\\),“;”,)%>%\将所有“(NN)”更改为“;”
strsplit(split=';')%>%#将字符串拆分为一个列表
lappy(rev)%>%#恢复订单
lappy('[',1)%>%#选择第一个元素
unlist()#更改回矢量
>纽克斯
[1] “WB”“WB”“NBIO”“CITG-TP”“BK-AR”

这将删除引号之间的数字,并选择每个字符串中的最后一个代码。我正在使用管道(
%%>%%
)使代码更干净

library(magrittr)  # pipe operators
newx <- 
  x %>% 
  gsub('[[:blank:]]\\([[:digit:]]*\\)', ';', .) %>%  # change all " (NN)" to ";"
  strsplit(split = ';') %>%                          # split the strings into a list
  lapply(rev) %>%                                    # revert the order
  lapply('[[', 1) %>%                                # select first element
  unlist()                                           # change back to vector

> newx
[1] "WB"      "WB"      "NBIO"    "CITG-TP" "BK-AR"  
library(magrittr)#管道操作符
新x%
gsub(“[:blank:][]\\”([[:digit:][]*\\),“;”,)%>%\将所有“(NN)”更改为“;”
strsplit(split=';')%>%#将字符串拆分为一个列表
lappy(rev)%>%#恢复订单
lappy('[',1)%>%#选择第一个元素
unlist()#更改回矢量
>纽克斯
[1] “WB”“WB”“NBIO”“CITG-TP”“BK-AR”

我强烈怀疑这是否是最有效的正则表达式,但这将为您提供所需的确切输出:

library(stringr)
str_replace_all(x, "CT\\s\\(\\d+\\)|BK\\s\\(\\d+\\)|PS\\s\\(\\d+\\)|\\s\\(\\d+\\)","")
[1] "WB"      "WB"      "NBIO"    "CITG-TP" "BK-AR" 
我玩的是一些更多,这看起来也工作

str_replace_all(x, "\\s\\(\\d+\\)|CT|PS|BK(?=\\s)","")
[1] "WB"      "WB"      "NBIO"    "CITG-TP" "BK-AR" 
这里有一个更一般的方法

strReverse <- function(x){
    sapply(lapply(strsplit(x, NULL), rev), paste, collapse="")
}

strReverse(str_extract(strReverse(x),"(?<=\\(\\s).*?(?=(\\)|$))"))
[1] "WB"      "WB"      "NBIO"    "CITG-TP" "BK-AR" 

strReverse我强烈怀疑这是最有效的正则表达式,但这会让您获得您想要的确切输出:

library(stringr)
str_replace_all(x, "CT\\s\\(\\d+\\)|BK\\s\\(\\d+\\)|PS\\s\\(\\d+\\)|\\s\\(\\d+\\)","")
[1] "WB"      "WB"      "NBIO"    "CITG-TP" "BK-AR" 
我玩的是一些更多,这看起来也工作

str_replace_all(x, "\\s\\(\\d+\\)|CT|PS|BK(?=\\s)","")
[1] "WB"      "WB"      "NBIO"    "CITG-TP" "BK-AR" 
这里有一个更一般的方法

strReverse <- function(x){
    sapply(lapply(strsplit(x, NULL), rev), paste, collapse="")
}

strReverse(str_extract(strReverse(x),"(?<=\\(\\s).*?(?=(\\)|$))"))
[1] "WB"      "WB"      "NBIO"    "CITG-TP" "BK-AR" 

strReverse Post一个可复制的示例;你发布的不是data.frame。这可以吗?检查你示例中的逗号Post一个可复制的示例;你发布的不是data.frame。这可以吗?检查你示例中的逗号不这不是我的意思,因为有些valies必须被省略,如[2]这是
“CT(14)WB(15)”
->
“WB”
所以CT应该是正确的,我认为您键入的示例是错误的。我更新了答案,以处理任何代码和任何重复次数。不,这不是我的意思,因为有些箱子必须被省略,如[2],即
“CT(14)WB(15)”
->
“WB”
所以CT应该是正确的,我认为您键入的示例是错误的。我更新了答案,以处理任何代码和任何重复次数。它适用于示例,但我得到了更多不同类型的值,如
BK(07)
CT(09)
,因此它们仍然转换为
”“
。你能把它变得更一般吗?让我看看我能做些什么。我有另一个想法。它适用于这个例子,但是我得到了更多不同类型的值,比如
BK(07)
CT(09)
,所以它们仍然被转换成
。你能把它变得更一般吗?让我看看我能做些什么。我有另一个想法。