自动为R

时间:2017-10-23 10:42:44

标签: r vector

我有一个中国星座的数据集,按照相应的星座分组,其数据框中的序列如下:

c("紫微垣", "紫微垣", "紫微垣", "紫微垣", "紫微垣", 
"紫微垣", "紫微垣", "紫微垣", "紫微垣", "紫微垣", 
"紫微垣", "紫微垣", "紫微垣", "紫微垣", "紫微垣", 
"紫微垣", "紫微垣", "紫微垣", "紫微垣", "紫微垣", 
"紫微垣", "紫微垣", "紫微垣", "紫微垣", "紫微垣", 
"紫微垣", "紫微垣", "紫微垣", "紫微垣", "紫微垣", 
"紫微垣", "紫微垣", "紫微垣", "紫微垣", "紫微垣", 
"紫微垣", "紫微垣", "太微垣", "太微垣", "太微垣", 
"太微垣", "太微垣", "太微垣", "太微垣", "太微垣", 
"太微垣", "太微垣", "太微垣", "太微垣", "太微垣", 
"太微垣", "太微垣", "太微垣", "太微垣", "太微垣", 
"太微垣", "太微垣", "天市垣", "天市垣", "天市垣", 
"天市垣", "天市垣", "天市垣", "天市垣", "天市垣", 
"天市垣", "天市垣", "天市垣", "天市垣", "天市垣", 
"天市垣", "天市垣", "天市垣", "天市垣", "天市垣", 
"天市垣", "角宿", "角宿", "角宿", "角宿", "角宿", 
"角宿", "角宿", "角宿", "角宿", "角宿", "角宿", "亢宿", 
"亢宿", "亢宿", "亢宿", "亢宿", "亢宿", "亢宿", "氐宿", 
"氐宿", "氐宿", "氐宿", "氐宿", "氐宿", "氐宿", "氐宿", 
"氐宿", "氐宿", "氐宿", "房宿", "房宿", "房宿", "房宿", 
"房宿", "房宿", "房宿", "心宿", "心宿", "尾宿", "尾宿", 
"尾宿", "尾宿", "尾宿", "箕宿", "箕宿", "箕宿", "斗宿", 
"斗宿", "斗宿", "斗宿", "斗宿", "斗宿", "斗宿", "斗宿", 
"斗宿", "斗宿", "牛宿", "牛宿", "牛宿", "牛宿", "牛宿", 
"牛宿", "牛宿", "牛宿", "牛宿", "牛宿", "牛宿", "女宿", 
"女宿", "女宿", "女宿", "女宿", "女宿", "女宿", "女宿", 
"虛宿", "虛宿", "虛宿", "虛宿", "虛宿", "虛宿", "虛宿", 
"虛宿", "虛宿", "虛宿", "危宿", "危宿", "危宿", "危宿", 
"危宿", "危宿", "危宿", "危宿", "危宿", "危宿", "室宿", 
"室宿", "室宿", "室宿", "室宿", "室宿", "室宿", "室宿", 
"室宿", "室宿", "壁宿", "壁宿", "壁宿", "壁宿", "壁宿", 
"壁宿", "奎宿", "奎宿", "奎宿", "奎宿", "奎宿", "奎宿", 
"奎宿", "奎宿", "奎宿", "婁宿", "婁宿", "婁宿", "婁宿", 
"婁宿", "婁宿", "胃宿", "胃宿", "胃宿", "胃宿", "胃宿", 
"胃宿", "胃宿", "昴宿", "昴宿", "昴宿", "昴宿", "昴宿", 
"昴宿", "昴宿", "昴宿", "昴宿", "畢宿", "畢宿", "畢宿", 
"畢宿", "畢宿", "畢宿", "畢宿", "畢宿", "畢宿", "畢宿", 
"畢宿", "畢宿", "畢宿", "畢宿", "觜宿", "觜宿", "觜宿", 
"參宿", "參宿", "參宿", "參宿", "參宿", "參宿", "井宿", 
"井宿", "井宿", "井宿", "井宿", "井宿", "井宿", "井宿", 
"井宿", "井宿", "井宿", "井宿", "井宿", "井宿", "井宿", 
"井宿", "井宿", "井宿", "井宿", "鬼宿", "鬼宿", "鬼宿", 
"鬼宿", "鬼宿", "鬼宿", "鬼宿", "柳宿", "柳宿", "星宿", 
"星宿", "星宿", "星宿", "星宿", "張宿", "張宿", "翼宿", 
"翼宿", "軫宿", "軫宿", "軫宿", "軫宿", "軫宿", "南極星區", 
"南極星區", "南極星區", "南極星區", "南極星區", 
"南極星區", "南極星區", "南極星區", "南極星區", 
"南極星區", "南極星區", "南極星區", "南極星區", 
"南極星區", "南極星區", "南極星區", "南極星區", 
"南極星區", "南極星區", "南極星區", "南極星區", 
"南極星區", "南極星區")

我有另一个列表,其中包含这些星号之间的结构关系。

structure(list(三垣 = c("紫微垣", "太微垣", "天市垣"
), 四象 = c("蒼龍(東)", "玄武(北)", "白虎(西)", "朱雀(南)"
), 二十八宿 = structure(c("角宿", "亢宿", "氐宿", "房宿", 
"心宿", "尾宿", "箕宿", "斗宿", "牛宿", "女宿", "虛宿", 
"危宿", "室宿", "壁宿", "奎宿", "婁宿", "胃宿", "昴宿", 
"畢宿", "觜宿", "參宿", "井宿", "鬼宿", "柳宿", "星宿", 
"張宿", "翼宿", "軫宿"), .Names = c("蒼龍1", "蒼龍2", 
"蒼龍3", "蒼龍4", "蒼龍5", "蒼龍6", "蒼龍7", "玄武1", 
"玄武2", "玄武3", "玄武4", "玄武5", "玄武6", "玄武7", 
"白虎1", "白虎2", "白虎3", "白虎4", "白虎5", "白虎6", 
"白虎7", "朱雀1", "朱雀2", "朱雀3", "朱雀4", "朱雀5", 
"朱雀6", "朱雀7")), 南極星區 = "南極星區"), .Names = c("三垣", 
"四象", "二十八宿", "南極星區"))

这个想法是利用结构化数据为星座表上的每个项目生成唯一索引。

以下是我如何开始这样做的事情:

yxsl <- unlist(yxs) #flatten the list
sno <- tibble(sno=names(yxsl), 垣.宿.區=yxsl) #generate index from header data on flattened list
sno$sno <- gsub("星區|二十八宿.", "", sno$sno) #remove unwanted text on the index

我遇到了rle函数,它返回变量中每个更改的长度,这在索引生成过程中应该会有所帮助。

i <- rle(constellation$sno) #Run Length Encoding

现在我需要做的就是让R扩展i$lengths中给出的数值向量值,每个数字从1开始计算,以生成每个类别更改的重复索引号,在原始索引的后面。

我应该怎么做呢? 是否有更好和/或更简单的方法来做到这一点?

这是最终的代码:

i <- sequence(i$lengths) %>% sprintf("%02d", .)
constellation$sno <- paste0(constellation$sno, "-", i)

1 个答案:

答案 0 :(得分:3)

我们可以使用sequence

sequence(v1)