R语言 创建二进制表,其中行数是变量的值

k4ymrczo  于 2023-06-27  发布在  其他
关注(0)|答案(2)|浏览(91)

我有一个数据集,其中有两个变量(var1和var2),代表两个时间的活着的个体。我需要用一个新的二进制变量创建一个表,其中的行数对应于var1的值,在这个变量中,我需要根据var2的值分配“1”(例如:如果var1中有10,var2中有3,那么我需要10行,其中3行为“1”,其余为“0”)。有什么功能可以帮助吗?谢谢

0md85ypi

0md85ypi1#

一种与@Guillaume Mulier非常相似的方式,但矢量化;

x <- data.frame(id = 1:3, var1 = c(10, 5, 1), var2 = c(3, 3, 0))

with(x, data.frame(id=rep(id, var1),
              mort=rep(rep(1:0, nrow(x)),
                       c(matrix(c(var2, var1 - var2), 2, byrow=TRUE)))))
#   id mort
#1   1    1
#2   1    1
#3   1    1
#4   1    0
#5   1    0
#6   1    0
#7   1    0
#8   1    0
#9   1    0
#10  1    0
#11  2    1
#12  2    1
#13  2    1
#14  2    0
#15  2    0
#16  3    0
hjzp0vay

hjzp0vay2#

我可能误解了你的意思,但这是我所做的:

exemple <- data.frame(id = 1:3, var1 = c(10, 5, 1), var2 = c(3, 3, 0))
apply(exemple, 1, \(x) data.frame(id = rep(x[["id"]], times = x[["var1"]]), 
                                  var_binaire = rep(c(1, 0), times = c(x[["var2"]], x[["var1"]] - x[["var2"]])))) |>
  do.call(what = "rbind")

它似乎做到了这一点,它通过使用函数rep重复1和0来创建一个data.frame。Apply与margin = 1一起用于执行行操作。因此,apply在这里创建一个列表,每个元素都是一个带有var1行和var_binaire = 1 var2次的data.frame。然后,do.call("rbind")将所有内容组合在一个data.frame中。结果如下:

exemple
  id var1 var2
1  1   10    3
2  2    5    3
3  3    1    0
output
   id var_binaire
1   1           1
2   1           1
3   1           1
4   1           0
5   1           0
6   1           0
7   1           0
8   1           0
9   1           0
10  1           0
11  2           1
12  2           1
13  2           1
14  2           0
15  2           0
16  3           0

我以为没有apply也可以,但我不知道怎么做。也许会有更好的解决方案。希望这能帮上忙。

相关问题