如何根据列的值对观察值重新编号[重复]
Posted
技术标签:
【中文标题】如何根据列的值对观察值重新编号[重复]【英文标题】:How to renumber the observations based on the value of a column [duplicate] 【发布时间】:2019-05-04 08:11:37 【问题描述】:下面是我的数据的简化示例,new
列是我要添加到数据集中的列。基本上,我想使用 1,2,3,4... 重命名riskset
,这样我可以更轻松地进行循环。 riskset
中的数字已排序,它们不连续,riskset
中存在重复数字(每个唯一数字 10~11),所以如何添加另一列根据它们的 riskset
数字分组观察?
riskset new
a.0000000017 1
a.0000000017 1
a.0000000017 1
a.0000000017 1
a.0000000066 2
a.0000000066 2
a.0000000066 2
a.0000000066 2
a.0000000099 3
a.0000000099 3
a.0000000099 3
a.0000000099 3
a.0000000099 3
......
【问题讨论】:
【参考方案1】:一个简单的基本 R 解决方案是使用 factor
s 然后转换 as.integer
as.integer(as.factor(df$riskset))
#[1] 1 1 1 1 2 2 2 2 3 3 3 3 3
或者因为您要求提供dplyr
选项
df %>% mutate(new = as.integer(as.factor(riskset)))
或使用transform
的基本R等效项
transform(df, new = as.integer(as.factor(riskset)))
另一种选择是使用dplyr::lag
和cumsum
df %>% mutate(new = cumsum(riskset != lag(riskset, default = T)) + 1)
或者既然你提到了group_by
,你可以这样做
df %>% group_by(riskset) %>% group_indices()
生成组索引。
group_indices
也适用于mutate
df %>% group_by(riskset) %>% mutate(new = group_indices())
样本数据
df <- read.table(text =
" riskset new
a.0000000017 1
a.0000000017 1
a.0000000017 1
a.0000000017 1
a.0000000066 2
a.0000000066 2
a.0000000066 2
a.0000000066 2
a.0000000099 3
a.0000000099 3
a.0000000099 3
a.0000000099 3
a.0000000099 3", header = T)
【讨论】:
以上是关于如何根据列的值对观察值重新编号[重复]的主要内容,如果未能解决你的问题,请参考以下文章