【发布时间】:2019-05-21 17:24:14
【问题描述】:
Reproducible tibble:我有一个类似于下图所示的数据库。不同之处在于我正在使用的数据库要大得多。
general_tibble <- tibble(gender = c("female", "female", "male"),
age = c(18, 19,18),
age_partner = c(22,20,17),
max_age = c(60, 60, 65),
nrs =c(42,41,47))
general_tibble 结果:
gender age age_partner max_age nrs
1 female 18 22 60 42
2 female 19 20 60 41
3 male 18 17 65 47
问题:
如何从以前的表中创建一个新表,其值为 nrs,并创建一个名为 n 的列变量,该变量从 0 变为 nrs 中的值?
为了进一步说明,在general_tibble 的第 1 行中,nrs 列等于 42,因此该列将从 0 变为 42,在第 2 行中,nrs 等于 41,因此该列将从 0 变为到 41,第 3 行也一样。
我目前正在使用下面的代码。它可以工作,但是当general_tibble 太大时,代码执行起来很慢。
general_list <- list()
for(i in 1:NROW(general_tibble)){
general_list[[i]] <- data.frame(general_tibble[i, ],
n = 0:general_tibble[[i, "nrs"]])
}
然后我bind_rows()general_list获取general_binded
general_binded <- bind_rows(general_list)
general_binded[c(1:5, 38:42),] 结果:
gender age age_partner max_age nrs n
1 female 18 22 60 42 0
2 female 18 22 60 42 1
3 female 18 22 60 42 2
4 female 18 22 60 42 3
5 female 18 22 60 42 4
38 female 18 22 60 42 37
39 female 18 22 60 42 38
40 female 18 22 60 42 39
41 female 18 22 60 42 40
42 female 18 22 60 42 41
PS: 在 for 循环中,我使用 data.frame() 而不是 tibble(),因为我想回收这些行。如果你有一些涉及小标题或数据框的建议,我很乐意接受。
【问题讨论】: