我正在尝试使用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)
运行此命令时,我会收到下一个错误
Error in ifelse(nchar(x > 3), y = substr(x, 4, 5), y = substr(x, 3)) :
formal argument "yes" matched by multiple actual arguments`
我想要的是向量“ y”得到数字1,2,3,4,-1,-1,-1 这样我就可以在后面绑定两个列。如果您有更好的方法,我将不胜感激。
答案 0 :(得分:1)
您快到了!只要长度大于3的字符串长度为4个字符,此方法就可以使用。
ifelse(nchar(x) > 3, substr(x, 5, 5), -1)
如果您的字符串可能超过4个字符:
ifelse(nchar(x) > 3, sub(".*([0-9]).*", "\\1", x), -1)
答案 1 :(得分:0)
我猜您需要一个数据框。这可能就是您需要的-
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