我需要你的帮助:我在下面的data0中有一个类似于这个子数据的数据框。
data0 <- data.frame(id = c("AH001","AH001","AH002","AH002","AH002","AH002","AH003","AH003","AH003","AH003"),
numvisit = c(2,3,2,3,4,5,2,3,4,5),
datvisit = c(25/06/2014,24/07/2014,25/06/2014,24/07/2014,25/08/2014,26/09/2014,25/06/2014,24/07/2014,25/08/2014,26/09/2014),
weight = c(51.3,51.4,59.8,59.6,NA,NA,52.2,52.5,NA,NA),
center = c(1,1,1,1,1,1,1,1,1,1))
我想创建一个新变量&#34; poidslast&#34;这将是变量&#34; poids&#34;的最后一个非NA 值。对于每个Id组。正如我在这里所做的那样&#34; dataexpected&#34;
dataexpected <- data.frame(id = c("AH001","AH001","AH002","AH002","AH002","AH002","AH003","AH003","AH003","AH003"),
numvisit = c(2,3,2,3,4,5,2,3,4,5),
datvisit = c(25/06/2014,24/07/2014,25/06/2014,24/07/2014,25/08/2014,26/09/2014,25/06/2014,24/07/2014,25/08/2014,26/09/2014), weight =c(51.3,51.4,59.8,59.6,NA,NA,52.2,52.5,NA,NA),
center = c(1,1,1,1,1,1,1,1,1,1),
lastweight = c(NA,51.4,NA,59.6,NA,NA,NA,52.5,NA,NA))
我已经尝试了一些功能,例如ave,aggregate,by ...但...... 请帮我找一个解决方案!
现在,我希望以宽格式转换我的数据框,并提供类似的内容:此屏幕截图中的&#34;数据范围&#34; ==&gt;
答案 0 :(得分:3)
使用glGetUniformLocation()
,这是一个班轮:
data.table
<强>解释强>
1. setDT(data0)
data0[data0[!is.na(weight),.I[.N], id]$V1, lastweight := weight]
- 查找每个组中最后一个非NA值的索引。
2.接下来,我们在data0[!is.na(weight),.I[.N], id]$V1
位置使用这些索引值,并通过在给定索引处获取相应的i
值来创建新列lastweight
。
更多说明:
1. weight
,.I
是为data.table库设计的特殊变量。 .N
为每行提供一个序号。 .I
提供组中所有行的计数。您可以在官方文档中找到有关这些的更多信息。
2.所以,这里.N
我只是组合data0[!is.na(weight),.I[.N], id]$V
,给每一行写一个数字,找到最后一行非na的数字。
3.尝试逐步完成此操作,您将更好地理解它。
第二回答:
这会产生您想要的宽广形状,但不会与您的输出完全匹配。您应该再次检查输出并告诉我。
id
答案 1 :(得分:0)
您可以使用fill
/ tidyr
中的tidyverse
。对于您提供的任何列,它会填充上面的最新非NA
值(.direction = "down"
)或更低(.direction = "up"
)。它在分组的数据框中工作。
library(tidyverse)
data0 %>%
group_by(id) %>%
fill(weight, .direction = "down")
#> # A tibble: 10 x 5
#> # Groups: id [3]
#> id numvisit datvisit weight center
#> <fct> <dbl> <dbl> <dbl> <dbl>
#> 1 AH001 2. 0.00207 51.3 1.
#> 2 AH001 3. 0.00170 51.4 1.
#> 3 AH002 2. 0.00207 59.8 1.
#> 4 AH002 3. 0.00170 59.6 1.
#> 5 AH002 4. 0.00155 59.6 1.
#> 6 AH002 5. 0.00143 59.6 1.
#> 7 AH003 2. 0.00207 52.2 1.
#> 8 AH003 3. 0.00170 52.5 1.
#> 9 AH003 4. 0.00155 52.5 1.
#> 10 AH003 5. 0.00143 52.5 1.
由reprex package(v0.2.0)创建于2018-04-30。