R很新,所以这可能是一个简单的答案。 我有一个字符列表。我想删除最后一个字母并将其迭代一次,因此A变为B,1变为2等。
waferlist<-c('L2MLQ','L2MIW','L2MK0','L2ML6','L2MO2','L2MHE','L2MK4','L2MN6','L2MLM')
for (i in waferlist)
{
lastchar<-substr(i,5,6) #Get last character
k<-lastchar==LETTERS #Is it a Letter
pos<-min(which(k==TRUE)) #Find letter position and itterate
pos<-pos+1
pos<-LETTERS[pos]
我遇到的问题是,如果最后一个字符是数字,则将其作为Inf
或NA_character_
返回,因为它不在LETTERS中。
我试图找到一种方法来选择下面的这些非结果,但它不会将其视为TRUE/FALSE
语句,因此它不起作用。还有另一种方法吗?
if(pos==Inf | pos==NA_character_)
{
lastchar<-as.numeric(lastchar)
pos<-lastchar+1
}
答案 0 :(得分:2)
我们可以使用<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-core</artifactId>
<version>1.2.1</version>
</dependency>
</dependencies>
使用gsubfn
条件将下一个数字或字母替换为最后一个字符。
if/else
以library(gsubfn)
gsubfn('(.)$', function(x) if(grepl('[0-9]', x))
as.numeric(x)+1 else LETTERS[match(x, LETTERS)+1], waferlist)
#[1] "L2MLR" "L2MIX" "L2MK1" "L2ML7" "L2MO3" "L2MHF" "L2MK5" "L2MN7" "L2MLN"
为例,9为最后一个字符
Z
答案 1 :(得分:2)
你可以做R:
static bool search(List<int> numbers, int searchKey)
{
int UB = numbers.Count - 1;
int LB = 0;
int MP = (UB + LB) / 2;
bool done = false;
do
{
if (numbers[MP] > searchKey)
{
UB = MP - 1;
MP = (UB + LB) / 2;
}
else if (numbers[MP] < searchKey)
{
LB = MP + 1;
MP = (UB + LB) / 2;
}
else if (numbers[MP] == searchKey)
{
done = true;
return true;
}
else
{
done = true;
return false;
}
} while (!done);
return false;
}
答案 2 :(得分:2)
要获得有效的解决方案(假设您使用的是大写字母),
res <- sapply(waferlist, function(i) {
out <- utf8ToInt(i)
out[[nchar(i)]] <- out[[nchar(i)]] + 1
if (out[[nchar(i)]] == 91) out[[nchar(i)]] <- 65
## For 9 cycling back to 0?
else if (out[[nchar(i)]] == 58) out[[nchar(i)]] <- 48
intToUtf8(out)
})
答案 3 :(得分:1)
这是一种dplyr方式:
library(stringi)
prefix = function(df, prefix) {
names(df) = paste(prefix,
names(df),
sep = "_")
df
}
letter_key =
data_frame(letter =
letters %>%
stri_trans_toupper) %>%
mutate(n = 1:n() )
next_letter =
letter_key %>%
mutate(next_n = n + 1) %>%
left_join(letter_key %>% prefix("next"))
data_frame(wafer = waferlist) %>%
mutate(letter = wafer %>% stri_sub(-1)) %>%
left_join(next_letter) %>%
mutate(next_character = ifelse(is.na(next_letter),
letter %>%
as.numeric %>%
`+`(1),
next_letter))
答案 4 :(得分:1)
您可以转换为基数10并添加1然后转换回来。 Matlab有一个dec2base函数,这个副本可能有效 - 并且必须有一个包更好地支持这种基本转换(或者只是在base36中添加)
height