R 根据条件移动[-]符号
我还在学习R,你们这些家伙在教育性的回答上帮了我很大的忙。 这就是我的问题,它可能是非常基本的,但我尝试了sub、gsub和casewhen的解决方案,没有得到任何结果。我有一列数字,右边有[-]号。如果他们有-我想把它提前R 根据条件移动[-]符号,r,R,我还在学习R,你们这些家伙在教育性的回答上帮了我很大的忙。 这就是我的问题,它可能是非常基本的,但我尝试了sub、gsub和casewhen的解决方案,没有得到任何结果。我有一列数字,右边有[-]号。如果他们有-我想把它提前 col<- c("1.000","100-","12.000-","12.568-", "100","150","1.000.000-&q
col<- c("1.000","100-","12.000-","12.568-", "100","150","1.000.000-")
col2<-c("A","B","C","D","E","F","G")
A<-cbind(col2,col)
A<-as.data.frame(A)
col您可以执行以下操作:
sub((.*)-$,“-\\1”,A$col)
#> [1] "1.000" "-100" "-12.000" "-12.568" "100" "150"
#> [7] "-1.000.000"
您可以执行以下操作:
sub((.*)-$,“-\\1”,A$col)
#> [1] "1.000" "-100" "-12.000" "-12.568" "100" "150"
#> [7] "-1.000.000"
您还可以编写一个ifelse,检查字符串中的最后一个字符是否为破折号,并在这种情况下将其粘贴到前面:
library(stringr)
A %>%
mutate(col_edit = ifelse(str_sub(col,-1,-1) == "-",
paste0("-",str_sub(col,1,-2)),
col))
col2 col col_edit
1 A 1.000 1.000
2 B 100- -100
3 C 12.000- -12.000
4 D 12.568- -12.568
5 E 100 100
6 F 150 150
7 G 1.000.000- -1.000.000
您还可以编写一个ifelse,检查字符串中的最后一个字符是否为破折号,在这种情况下,将其粘贴到前面:
library(stringr)
A %>%
mutate(col_edit = ifelse(str_sub(col,-1,-1) == "-",
paste0("-",str_sub(col,1,-2)),
col))
col2 col col_edit
1 A 1.000 1.000
2 B 100- -100
3 C 12.000- -12.000
4 D 12.568- -12.568
5 E 100 100
6 F 150 150
7 G 1.000.000- -1.000.000
使用str\u替换
library(stringr)
A$col - str_replace(A$col, "^(.*)-$", "-\\1")
A$col
#[1] "1.000" "-100" "-12.000" "-12.568" "100" "150" "-1.000.000"
使用str\u替换
library(stringr)
A$col - str_replace(A$col, "^(.*)-$", "-\\1")
A$col
#[1] "1.000" "-100" "-12.000" "-12.568" "100" "150" "-1.000.000"
哎呀。谢谢@Konradrudolph谢谢!它工作得很好,但是你能解释一下逻辑吗?这样我就可以改进我的编码了sub
使用正则表达式在字符向量的每个字符串中查找单个匹配项。正则表达式(.*)-$
表示“如果字符串以-
结尾,则匹配并捕获每个字符串中除最后一个-
之外的所有字符”。然后用替换字符串替换匹配的字符,替换字符串是一个-
,后跟\\1
,表示“原始string.Oops中捕获的所有字符。谢谢@Konradrudolph谢谢!它工作得很好,但是你能解释一下逻辑吗?这样我就可以改进我的编码了sub
使用正则表达式在字符向量的每个字符串中查找单个匹配项。正则表达式(.*)-$
表示“如果字符串以-
结尾,则匹配并捕获每个字符串中除最后一个-
之外的所有字符”。然后用替换字符串替换匹配的字符,替换字符串是一个-
,后跟\\1
,表示“原始字符串中捕获的所有字符”。