R 如何用数字替换特定字符串?

R 如何用数字替换特定字符串?,r,gsub,R,Gsub,我正在使用一个名为“离合器”的数据框,该数据框包含交易卡游戏中的卡的信息。其中一个变量CMD+可以由以下值组成: "R+1" "L+1" "R+2" "L+2" 0 我想做的是创建一个新变量,Clutch$C+,它为每个数据点获取这些字符串值,并用数字替换它们。R+1和L+1替换为0.5,R+2和L+2替换为1。0保持不变 我该怎么做?很抱歉,如果这是一个基本问题,我的R技能目前不太好,正在努力提高。您可以尝试: paste0(as.numeric(gsub("\\D", "\\1", x))

我正在使用一个名为“离合器”的数据框,该数据框包含交易卡游戏中的卡的信息。其中一个变量CMD+可以由以下值组成:

"R+1"
"L+1"
"R+2"
"L+2"
0
我想做的是创建一个新变量,Clutch$C+,它为每个数据点获取这些字符串值,并用数字替换它们。R+1和L+1替换为0.5,R+2和L+2替换为1。0保持不变

我该怎么做?很抱歉,如果这是一个基本问题,我的R技能目前不太好,正在努力提高。

您可以尝试:

paste0(as.numeric(gsub("\\D", "\\1", x))/2, sub("\\D", "\\1", x))

[1] "0.5+1" "0.5+1" "1+2"   "1+2"  

可能不是最漂亮的解决方案,但这应该是可行的

C<-rep(0,length(Clutch$CMD))
Clutch<-cbind(Clutch,C)
Clutch$C+[which(Clutch$CMD+=="R+1")]<-0.5
Clutch$C+[which(Clutch$CMD+=="L+1")]<-0.5
Clutch$C+[which(Clutch$CMD+=="R+2")]<-1

C以下是一种使用结果是字符串中数字的一半这一事实的方法:

Clutch <- data.frame(`CMD+` = sample(c("R+1", "L+1", "R+2", "L+2", 0), 10, replace = TRUE))

Clutch[["C+"]] <- as.numeric(gsub("[^0-9]", "", Clutch$CMD))/2

Clutch

> Clutch
   CMD.  C+
1   R+1 0.5
2   R+2 1.0
3   R+1 0.5
4   L+1 0.5
5   L+1 0.5
6   R+1 0.5
7   R+1 0.5
8   L+1 0.5
9     0 0.0
10  L+1 0.5

Clutch您可以简单地使用
gsub

> as.numeric(gsub(".*[+]","",a))/2
[1] 0.5 0.5 1.0 1.0 0.0
如果是
数据帧
。你可以用这个-

> library(data.table)
> dt <- data.frame(CMD = c("R+1", "L+1", "R+2", "L+2", 0))
> setDT(dt)[,CMD:=as.numeric(gsub(".*[+]","",a))/2]
> dt
   CMD
1: 0.5
2: 0.5
3: 1.0
4: 1.0
5: 0.0
>库(data.table)
>dt setDT(dt)[,CMD:=as.numeric(gsub(“.[+]”,“”,a))/2]
>dt
指令
1: 0.5
2: 0.5
3: 1.0
4: 1.0
5: 0.0

另一个想法是使用一个简单的
ifelse
语句,在字符串中查找
1
,并替换为0.5,
2
替换为1,即

#where x is your column,

as.numeric(ifelse(grepl('1', x), 0.5, ifelse(grepl('2', x), 1, x)))
#[1] 0.5 0.5 1.0 1.0 0.0