---------------------
SITE Kind
shanghai baby
shanghai beauty
----------------------
baby和beauty,写成baby,beauty,但是该组前面一列里是shanghai shanghai,因为两个名字一样,所以不写成shanghai,shanghai
- ##define data frame
- dat <- data.frame(ID=c(8,8,4,5,9,9),
- SITE=c('beijing','shanghai','beijing','beijing','shanghai','shanghai'),
- Kind=c(rep('baby',5),'beauty'),
- Volume=c(1,1,4,5,2,2))
- dat
- ##create new site names
- sub.dat <- dat[,c('ID','SITE','Kind')]
- site <- by(data=sub.dat,INDICES = sub.dat$ID,FUN = function(x){
- a <- ifelse(length(unique(x$SITE))==1,
- as.vector(x$SITE)[1],paste0(x$SITE,collapse = ','))
- b <- ifelse(length(unique(x$Kind))==1,
- as.vector(x$Kind)[1],paste0(x$Kind,collapse = ','))
- data.frame(SITE=a,Kind=b)
- })
- site <- site[as.character(unique(sub.dat$ID))]
- site <- do.call(rbind,site)
- dat.new <- dat[match(rownames(site),dat$ID),]
- dat.new[,c('SITE','Kind')] <- site
- row.names(dat.new) <- NULL
- dat.new
这个代码对大数据处理也应该还快的,比对每一行进行循环要快很多。
在这个网页上好像有些代码会自动被转换成数学公式,乱码主要发生在"x$SITE" 和 "x$Kind"上,中间是美元符号。