我对编程一无所知。我需要从孩子首字母生日和教师编号中生成ID
。我不知道这是否可以在excel中轻松完成,或者我应该使用R为例。我在excel中有这样的列
Grade Teacher Students Initials Birthday
我需要生成ID
以#4
开头,而不是grade
,然后教师有一个指定的2
位数字,孩子的首字母替换数字{ {1}}每封信1/26
(例如RD为A-Z
)生日月日
所以
成绩为1804
的教师6
首字母#05
生日RD
为June 06
我有大约2个460518040606
小孩,所以我很感激一些帮助
谢谢
答案 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
的原因。LEFT
和RIGHT
分别从字符串的左侧和右侧返回给定的字符数。DAY
和MONTH
返回指定日期的日期和月份。希望有所帮助。