R 如果不是。。。在这里使用正确的函数?

R 如果不是。。。在这里使用正确的函数?,r,R,我试图使用ifelse在数据框中填充一个新列。 如果字符串长度大于3,我想提取列中字符串的最后几位。如果字符字符串较短,我只希望它给出-1 我已经知道如果字符串长度超过3个字符,如何提取字符串的最后一个字符 x<- c("ABCD1", "ABCD2", "ABCD3", "ABCD4", "BC5", "BC6", "BC7") y<-NULL dat<-cbind(x,y) ifelse (nchar(x>3), y=substr(x, 5,5), y=-1)

我试图使用ifelse在数据框中填充一个新列。 如果字符串长度大于3,我想提取列中字符串的最后几位。如果字符字符串较短,我只希望它给出-1

我已经知道如果字符串长度超过3个字符,如何提取字符串的最后一个字符


x<- c("ABCD1", "ABCD2", "ABCD3", "ABCD4", "BC5", "BC6", "BC7")
y<-NULL
dat<-cbind(x,y)

ifelse (nchar(x>3), y=substr(x, 5,5), y=-1)

dat<-cbind(x,y)
view(dat)

我想要的是向量“y”得到数字1,2,3,4,-1,-1,-1
所以我可以在后面绑定这两列。如果你有更好的方法,我将不胜感激

你就快到了!只要长度大于3的字符串长度为4个字符,这将起作用

ifelse(nchar(x)>3,substr(x,5,5),-1)
如果字符串长度可能超过4个字符:

ifelse(nchar(x)>3,sub(“.*([0-9]).*”,“\\1”,x),-1)

我猜您需要一个数据帧。这是你可能需要的-

x <- c("ABCD1", "ABCD2", "ABCD3", "ABCD4", "BC5", "BC6", "BC7")
dat <- data.frame(x, stringsAsFactors = F)

dat$y <- ifelse(nchar(dat$x) > 3, as.numeric(substr(dat$x, 5,5)), -1)

      x  y
1 ABCD1  1
2 ABCD2  2
3 ABCD3  3
4 ABCD4  4
5   BC5 -1
6   BC6 -1
7   BC7 -1

x始终有一个数字,这是您要提取的字符吗?如果是这样,还有更简单的方法!是的,总是有一个数字,但如果字符串短于3,我希望它添加一个“-1”@d.b,这样就行了!但我仍然不知道为什么我的ifelse没有working@d.b哦我得到了它!谢谢谢谢我只是不明白为什么ifelse不为我工作@Adam K
x <- c("ABCD1", "ABCD2", "ABCD3", "ABCD4", "BC5", "BC6", "BC7")
dat <- data.frame(x, stringsAsFactors = F)

dat$y <- ifelse(nchar(dat$x) > 3, as.numeric(substr(dat$x, 5,5)), -1)

      x  y
1 ABCD1  1
2 ABCD2  2
3 ABCD3  3
4 ABCD4  4
5   BC5 -1
6   BC6 -1
7   BC7 -1