嗨,我想模拟这样的数据集:
City Person
1 1
1 2
1 3
2 1
2 2
2 3
城市ID可以从1到30,人物ID可以从1到40。我知道我可以通过以下代码创建城市:
data=data.frame(City=rep(1:30,40),Person=0)
但是,我不知道如何在不使用循环的情况下为每个城市ID分配Person变量。如何为每个城市ID分配1-40之间的个人ID?任何帮助将不胜感激。谢谢。
答案 0 :(得分:1)
我们可以做到
df1$Person <- with(df1, ave(seq_along(City), City, FUN = seq_along))
或
df1$Person <- sequence(table(df1$City))
而且,更容易扩展
expand.grid(City = 1:30, Person = 1:3)
或与tidyverse
library(tidyverse)
crossing(City = 1:30, Person = 1:3)
或使用tidyverse
library(tidyverse)
df1 %>%
group_by(City) %>%
mutate(Person = row_number())
或使用data.table
library(data.table)
setDT(df1)[, Person := seq_len(.N), by = City]
df1 <- data.frame(City = rep(1:2, each = 3))