【发布时间】:2020-07-14 08:16:01
【问题描述】:
我有一个这样的数据框 df
> df <- data.frame(type=c("Id","v1","v2","Id","v1","v1","v2","Id","v1","v2","v3"),num=c(1000,200,500,1001,727,50,800,1002,400,365,865))
> df
type num
1 Id 1000
2 v1 200
3 v2 500
4 Id 1001
5 v1 727
6 v1 50
7 v2 800
8 Id 1002
9 v1 400
10 v2 365
11 v3 865
我需要创建另一个数据框,其中 Id, v1, v2, v3 作为列名和 df 中的相应值,以便每个 id 下面的变量属于该 id 并且当相同的变量重复时,它必须使用相同的 id 进行映射,如果变量不存在,则必须给出 NA。这是所需的输出。
Id v1 v2 v3
1 1000 200 500 NA
2 1001 727 NA NA
3 1001 50 800 NA
4 1002 400 365 865
我想过一种使用 for 循环的方法。但它似乎复杂且难以构建它。有没有不使用 for 循环的方法。
【问题讨论】:
-
如果变量在某些情况下不存在,如何确定将当前值放在哪里?例如,对于
Id1001,我们有两个v1(727 和50)和一个v2(800)。我们怎么知道 800 应该接近v1值 50 而不是 727? -
@RicS 在这种情况下,重要的是顺序而不是值。
-
我知道这是顺序,但为什么
v2中的800 接近v1中的50 而不是727?我们如何确定?例如,在您接受的解决方案中,v2中的 800 接近于v1中的 727 而不是 50(因此与您在问题中写的输出相反) -
@RicS 对于
v1=727,我们没有v2和v3(如果您按订单),但我们有v1=50。这就是为什么