用excel或R生成姓名和生日的唯一ID码

我对编程一无所知。 我需要从孩子的姓名缩写生日和教师编号中生成一个ID 。 我不知道是否可以很容易地在Excel中完成,或者我应该使用R例如。 我所拥有的是在Excel中这样的列

  Grade Teacher Students Initials Birthday 

我需要生成的ID#4开始,然后是grade然后老师有一个分配的2位数字孩子的名字首字母replace每个字母AZ 1/26 (例如,RD将是1804 )生日月日

所以6年级的老师#05老师RD生日June 06将是460518040606

我有大约2 000孩子,所以我会感谢一些帮助

谢谢

不确定这个练习是否会生成一个唯一的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)))) 

或者从qdap使用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) 

你可以很容易地在Excel中做到这一点。 假设A2包含年级, B2二位教师代码, C2学生姓名缩写和D2生日date。 然后在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函数用于格式化string,string格式化程序"00"表示以2位数字打印,如果需要则添加0's
  • CODE函数计算给定字符的ascii码。 代码为65 ,这就是为什么你必须减去64
  • LEFTRIGHT分别从string的左侧和右侧返回给定数量的字符。
  • DAYMONTH返回给定date的date和月份。

希望有所帮助。