我有一个数据帧的量,属性之一是原始对象标识符编号。我已经拆了一些记录到两个对象。现在,我想分配,包括原来的名字,并从A到Z的一封信一个新的对象标识符(幸好我的数据集有一个最大的每原始标识符12点式两份)。我发现了一个方法循环,但考虑到我的数据集有超过75万的记录,这是很长的。有什么比我的解决方案更简单?我还没有掌握建立适用于R. / dlyr类型命令
#create data.frame
sample = data.frame(ID_obj=c(1:6, 4, 2), x=c(1,1,1,1,2,2,2,4), y=c("a3", "4a", "5b", "8b"))
#reorder sample by ID_obj
sample<-sample[order(sample$ID_obj),]
#create empty vector
test<-numeric(0)
for (i in 1:6)
{
add<-letters[1:dt[i,"Freq"]]
test<-c(test, add)
}
sample$ID_obj_new<-paste(sample$ID_obj, test, sep="_")
# ID_obj x y ID_obj_new
#1 1 1 a3 1_a
#2 2 1 4a 2_a
#8 2 4 8b 2_b
#3 3 1 5b 3_a
#4 4 1 8b 4_a
#7 4 2 5b 4_b
#5 5 2 a3 5_a
#6 6 2 4a 6_a
在这里,你有一个解决方案去使用包dplyr
library(dplyr)
library(bindrcpp)
sample %>%
group_by(ID_obj) %>%
mutate(ID_obj_new = paste(ID_obj, letters[1:n()], sep="_")) %>%
ungroup()
为了完整性起见,这里也是其使用从rowid()
包data.table功能的简洁的解决方案:
library(data.table)
setDT(sample)[, ID_obj_new := paste(ID_obj, letters[rowid(ID_obj)], sep = "_")][]
ID_obj x y ID_obj_new 1: 1 1 a3 1_a 2: 2 1 4a 2_a 3: 2 4 8b 2_b 4: 3 1 5b 3_a 5: 4 1 8b 4_a 6: 4 2 5b 4_b 7: 5 2 a3 5_a 8: 6 2 4a 6_a
如果sample
没有下令这会甚至工作。