试图在R中创建一个15位salesforce ID到18位数的转换。公式写在这里:https://salesforce.stackexchange.com/questions/27686/how-can-i-convert-a-15-char-id-value-into-an-18-char-id-value 但是在C#中,我想在R做这件事。将二进制字符串转换为R中的文本(salesforce ID转换为15到18)
我已经做出了一个笨重的公式,就像我在R中所知道的那样,它可以用于15位数的输入并成功返回18位数。我想知道如何通过dplyr将其应用于data.frame中的列。
重复性代码:
SFID_Convert <- function(fifteen_digit) {
if (length(fifteen_digit == 15)) {
# binary map ----
binary <-
c(
"00000",
"00001",
"00010",
"00011",
"00100",
"00101",
"00110",
"00111",
"01000",
"01001",
"01010",
"01011",
"01100",
"01101",
"01110",
"01111",
"10000",
"10001",
"10010",
"10011",
"10100",
"10101",
"10110",
"10111",
"11000",
"11001",
"11010",
"11011",
"11100",
"11101",
"11110",
"11111"
)
letter <- c(LETTERS, 0:5)
binarymap <- data_frame(binary, letter)
# sfid ----
sfid <- substr(fifteen_digit, 1, 15)
s1 <- substr(sfid, 1, 5)
s2 <- substr(sfid, 6, 10)
s3 <- substr(sfid, 11, 15)
convertID <- function(str_frag) {
str_frag <- paste(rev(strsplit(str_frag, NULL)[[1]]), collapse = '')
str_frag <- strsplit(str_frag, NULL)[[1]]
str_frag[which(unlist(gregexpr("[0-9]", str_frag)) == 1)] <- 0
str_frag[which(unlist(gregexpr("[a-z]", str_frag)) == 1)] <- 0
str_frag[which(unlist(gregexpr("[A-Z]", str_frag)) == 1)] <- 1
str_frag <<- paste(str_frag, collapse = '')
}
convertID(s1)
n1 <- str_frag
convertID(s2)
n2 <- str_frag
convertID(s3)
n3 <- str_frag
binary <- data_frame(c(n1, n2, n3)) %>%
select(binary = 1) %>%
left_join(binarymap)
return(paste(sfid, paste(binary$letter[1:3], collapse = ''), sep = ''))}
}
例如:
sfid <- "001a003920aSDuh"
SFID_Convert(sfid)
[1] "001a003920aSDuhAAG"
这就是我想要的东西,但是当你把它应用到DF ...
col <- c("001a003920aSDuh", "001a08h010JNkJd")
name <- c("compA", "compB")
df <- data_frame(name, col)
它采用“AAG”正确地为第一个计算,并将其应用于每一行。我可以通过lapply
它,但如果我有10万行的数量级,这将是我认为这样做的错误方法。
任何帮助表示赞赏!仍然在这里学习。 :)
辉煌谢谢!我回家后会试试看。我试图找到让我的代码更高效的方法。有人想到在函数外部使用二进制映射。如果我想将它添加到我经常使用的个人包中,我想将它嵌入到右侧? (这就是为什么我首先做到了这一点) –
在个人软件包的(有限)体验中,我编写了在同一个软件包中使用其他帮助函数的函数,所以我不认为需要函数来完全独立。但是,你可能希望作为一个单独的问题提出并获得更多意见。 –
有效且公平的答复。我会去做。谢谢!我一边盲目地努力完成这一切,一边学习。我敢肯定,我的效率很低,但无论如何!谢谢您的帮助 –