作者celestialgod (天)
看板R_Language
标题Re: [问题] Recode写法
时间Mon Sep 21 14:56:26 2015
※ 引述《criky (立业成家)》之铭言:
: [问题类型]:
: 程式谘询(我想用R 做某件事情,但是我不知道要怎麽用R 写出来)
: [软体熟悉度]:
: 入门(写过其他程式,只是对语法不熟悉)
: [问题叙述]:
: 若有一栏位id,R要怎麽编出id的流水号?
: id → id2
: 1122 1
: 1122 1
: 1133 2
: 1133 2
: 1133 2
: 2255 3
: 2255 3
: 2255 3
: 2255 3
: 4444 4
: 4444 4
: 5555 5
id = c("1122", "1122", "1133", "1133", "1133", "2255", "2255", "2255",
"4444", "4444", "5555")
tmp = rle(id)
tmp$values = 1:length(tmp$values)
inverse.rle(tmp)
# [1] 1 1 2 2 2 3 3 3 4 4 5
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.109.73.159
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1442818590.A.200.html
1F:推 criky: 学了一招rle 谢谢! 09/21 15:07
2F:→ criky: 再请问,我用 tmp$values=1:length(tmp$lengths) 09/21 15:52
3F:→ criky: 为什麽值没有任何改变啊? 我原本是想要算各流水号的累积n 09/21 15:52
不太懂,麻烦问题描述清楚一点,谢谢~
4F:→ criky: 问题我描述在自己的文章了 09/21 16:33
5F:→ criky: 第二行想问的是输入後 tmp值和原来的一样 觉得奇怪 09/21 16:33
do.call(c, sapply(tmp$lengths, function(x) 1:x))
# 1 2 1 2 3 1 2 3 1 2 1
6F:→ criky: 感谢! 09/21 16:45
7F:推 criky: 再请问,若id是文字串,好像就不能用前一篇文章的写法了? 09/23 12:01
8F:→ criky: 编流水号的部分 09/23 12:01
直接改成用factor就好
library(dplyr)
library(data.table)
library(magrittr)
id_ = c("1122", "1122", "1133", "1133", "1133", "2255", "2255", "2255",
"2255", "4444", "4444", "5555")
dat = data.table(id = id_)
dat %>% mutate(id2 = as.integer(factor(id))) %>% group_by(id) %>%
mutate(id3 = 1:length(id2))
id id2 id3
1 1122 1 1
2 1122 1 2
3 1133 2 1
4 1133 2 2
5 1133 2 3
6 2255 3 1
7 2255 3 2
8 2255 3 3
9 2255 3 4
10 4444 4 1
11 4444 4 2
12 5555 5 1
※ 编辑: celestialgod (140.109.73.190), 10/06/2015 12:10:13
※ 编辑: celestialgod (140.109.73.190), 10/07/2015 16:24:41