R填充列n次

时间:2019-05-05 14:14:00

标签: r data-manipulation

嗨,我想模拟这样的数据集:

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?任何帮助将不胜感激。谢谢。

1 个答案:

答案 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))