我想根据共享行标识符将列的值组合到一组特定的行中。这是 Excel 中数据的屏幕截图示例(左边是当前状态,右边是我想要的结果) 以下信息相同(顶部是当前状态,底部是我想要的结果。
id | 代码 | 组 | 分钟 | 分钟 1 | 分钟 2 | 3分钟 |
---|---|---|---|---|---|---|
1e | x222 | 1 | 4.5 | 4.5 | NA | NA |
1e | x124 | 1 | 4.5 | 4.5 | NA | NA |
1e | x143 | 2 | 6.7 | NA | 6.7 | NA |
1e | x123 | 2 | 6.7 | NA | 6.7 | NA |
1e | x123 | 2 | 6.7 | NA | 6.7 | NA |
1e | x143 | 3 | 8.9 | NA | NA | 8.9 |
1e | x123 | 3 | 8.9 | NA | NA | 8.9 |
id | 代码 | 组 | 分钟 1 | 分钟 2 | 3分钟 |
---|---|---|---|---|---|
1e | x222 | 1 | 4.5 | 6.7 | 8.9 |
1e | x124 | 1 | 4.5 | 6.7 | 8.9 |
我想找到一种方法来填充组 1 行中的 NA(第 2 分钟和第 3 分钟),当它们共享一个 id 时,第 2 分钟和第 3 分钟的值(并删除第 2 组和第 3 组的行)。一个id不一定有group 2或group 3,code个数因group 1而异
我已经尝试过 reshape()、pivot_wider()(在分钟列上)和其他一些东西,但它还没有为我工作。我觉得解决方案很简单,但出于某种原因我被卡住了。任何意见,将不胜感激!如果可能的话,我更愿意在 dplyr/the tidyverse 中这样做。
我们可以使用
fill
中的tidyr
在分组后用之前或下一个非NA替换NA
library(dplyr)
library(tidyr)
df1 %>%
group_by(id) %>%
fill(starts_with("minutes"), .direction = "downup") %>%
ungroup