如何用数字替换特定的字符串?
How to replace a specific character string with a number?
我正在处理一个名为 Clutch 的数据框,其中包含有关集换式纸牌游戏中纸牌的信息。其中一个变量 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
这是一种使用结果是字符串中数字一半的方法:
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
您可以简单地使用 gsub
> as.numeric(gsub(".*[+]","",a))/2
[1] 0.5 0.5 1.0 1.0 0.0
如果是data frame
。你可以使用这个-
> 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
另一个想法是使用一个简单的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
我正在处理一个名为 Clutch 的数据框,其中包含有关集换式纸牌游戏中纸牌的信息。其中一个变量 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
这是一种使用结果是字符串中数字一半的方法:
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
您可以简单地使用 gsub
> as.numeric(gsub(".*[+]","",a))/2
[1] 0.5 0.5 1.0 1.0 0.0
如果是data frame
。你可以使用这个-
> 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
另一个想法是使用一个简单的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