R按特殊字符“+”拆分字符串,并根据条件对拆分字符串进行分类
R split string by special character "+" and categorize the split strings based on conditions
您好,我需要将 mfn_rate
中的字符串拆分为出现时带有空格“+”的特殊字符,然后 return mfn_av
中它前面的数值和mfn_spec
之后的其余字符串
我正在尝试如下操作:
mfn_rate<-c("25%","25% + 2 GBP/tonne","2 GBP per tonne","10%")
mfn_av<-""
mfn_spec<-""
mfn<-data.frame(mfn_rate,mfn_av,mfn_spec)
for (i in 1:nrow(mfn)){
#if the value in mfn_rate is not a single percentage value, classify it into either mfn_av or mfn_spec
if(grepl("+",mfn$mfn_rate[i])){
mfn$mfn_spec[i] <- str_split(mfn$mfn_rate[i],"\+", "print string after +")
mfn$mfn_av[i] <- str_split(mfn$mfn_rate[i],"\+", "print numbers before + sign")
}
else ( mfn$mfn_rate[i] <- mfn$mfn_av[i])
}
输出应该是例如:
mfn_rate = 25% + 2 GBP/tonne
mfn_av = 25%
mfn_spec = 2 GBP/tonne
在 tidyverse
中使用 separate
和 str_detect
library(tidyverse)
mfn_rate<-c("25","25% + 2 GBP/tonne","2 GBP per tonne","10")
mfn <- data.frame(mfn_rate)
mfn <- mfn %>%
separate(mfn_rate, c("mfn_av", "mfn_spec"), " \+ ", remove=F) %>%
mutate(mfn_spec = if_else(str_detect(mfn_av, "[:alpha:]"), mfn_av, mfn_spec),
mfn_av = if_else(str_detect(mfn_av, "[:alpha:]"), NA_character_, mfn_av))
输出
> mfn
mfn_rate mfn_av mfn_spec
1 25 25 <NA>
2 25% + 2 GBP/tonne 25% 2 GBP/tonne
3 2 GBP per tonne <NA> 2 GBP per tonne
4 10 10 <NA>
您好,我需要将 mfn_rate
中的字符串拆分为出现时带有空格“+”的特殊字符,然后 return mfn_av
中它前面的数值和mfn_spec
我正在尝试如下操作:
mfn_rate<-c("25%","25% + 2 GBP/tonne","2 GBP per tonne","10%")
mfn_av<-""
mfn_spec<-""
mfn<-data.frame(mfn_rate,mfn_av,mfn_spec)
for (i in 1:nrow(mfn)){
#if the value in mfn_rate is not a single percentage value, classify it into either mfn_av or mfn_spec
if(grepl("+",mfn$mfn_rate[i])){
mfn$mfn_spec[i] <- str_split(mfn$mfn_rate[i],"\+", "print string after +")
mfn$mfn_av[i] <- str_split(mfn$mfn_rate[i],"\+", "print numbers before + sign")
}
else ( mfn$mfn_rate[i] <- mfn$mfn_av[i])
}
输出应该是例如:
mfn_rate = 25% + 2 GBP/tonne
mfn_av = 25%
mfn_spec = 2 GBP/tonne
在 tidyverse
separate
和 str_detect
library(tidyverse)
mfn_rate<-c("25","25% + 2 GBP/tonne","2 GBP per tonne","10")
mfn <- data.frame(mfn_rate)
mfn <- mfn %>%
separate(mfn_rate, c("mfn_av", "mfn_spec"), " \+ ", remove=F) %>%
mutate(mfn_spec = if_else(str_detect(mfn_av, "[:alpha:]"), mfn_av, mfn_spec),
mfn_av = if_else(str_detect(mfn_av, "[:alpha:]"), NA_character_, mfn_av))
输出
> mfn
mfn_rate mfn_av mfn_spec
1 25 25 <NA>
2 25% + 2 GBP/tonne 25% 2 GBP/tonne
3 2 GBP per tonne <NA> 2 GBP per tonne
4 10 10 <NA>