使用excel或R中的首字母和生日生成唯一ID代码

时间:2014-11-07 14:40:30

标签: r excel

我对编程一无所知。我需要从孩子首字母生日和教师编号中生成ID。我不知道这是否可以在excel中轻松完成,或者我应该使用R为例。我在excel中有这样的列

 Grade     Teacher  Students Initials  Birthday

我需要生成ID#4开头,而不是grade,然后教师有一个指定的2位数字,孩子的首字母替换数字{ {1}}每封信1/26(例如RD为A-Z)生日月日

所以 成绩为1804的教师6首字母#05生日RDJune 06

我有大约2个460518040606小孩,所以我很感激一些帮助

谢谢

2 个答案:

答案 0 :(得分:4)

不确定此练习是否会生成唯一ID。这是根据提到的条件生成ID的一种方法

Init <-  sapply(strsplit(dat$Initials,""),
             function(x) {l1 <- match(x,LETTERS)
              sprintf('%02d%02d', l1[1], l1[2])})

或者可以使用substr

完成上述步骤
 Init <-  sprintf('%02d%02d', match(substr(dat$Initials,1,1), LETTERS),
                       match(substr(dat$Initials, 2,2), LETTERS))

或者变化是

 Init <- do.call(`sprintf`, c('%02d%02d', lapply(1:2, function(x) 
                      match(substr(dat$Initials, x,x), LETTERS))))

或使用mgsub

中的qdap
library(qdap)
Init <- mgsub(LETTERS, sprintf('%02d',1:26), dat$Initials) 

Bday <- format(as.Date(paste(dat$Birthday, 2004), '%B %d %Y'), '%m%d')

paste0(4, dat$Grade, dat$Teacher, Init, Bday)
#[1] "460518190606" "440701040720" "470801190518" "450118040825"

数据

 dat <- data.frame(Grade=c(6,4,7,5), Teacher=c('05', '07', '08', '01'), 
          Students=c(3,5,7,8), Initials=c('RS','AD', 'AS', 'RD'), 
           Birthday=c('June 06', 'July 20', 'May 18', 'August 25'),
           stringsAsFactors=FALSE)

答案 1 :(得分:3)

您可以很容易地在Excel中执行此操作。假设A2包含成绩,B2 2位数教师代码,C2学生姓名首字母和D2生日作为日期。然后,E2中的以下公式将会执行(请检查您的系统是否使用分号;或简单逗号,作为Excel公式,我的显然是使用分号):

="4" & A2 & B2 & TEXT(CODE(LEFT(C2;1))-64;"00") & TEXT(CODE(RIGHT(C2;1))-64;"00") & 
                 TEXT(MONTH(D2);"00")&TEXT(DAY(D2);"00")

<强>解释

  • TEXT函数用于格式化字符串,字符串格式化程序"00"表示以2位数打印并在需要时添加0's
  • CODE函数计算给定字符的ascii代码。 A代码为65,这就是您必须减去64的原因。
  • LEFTRIGHT分别从字符串的左侧和右侧返回给定的字符数。
  • DAYMONTH返回指定日期的日期和月份。

希望有所帮助。