R语言 如何根据另一列中的共享值合并列?

tzdcorbm  于 2023-05-04  发布在  其他
关注(0)|答案(1)|浏览(257)

我想根据一个共享的行标识符将列的值合并到一组特定的行中。下面是Excel中数据的屏幕截图示例(左为当前状态,右为我希望它变成的样子)screenshot of data,下面是相同的信息(顶部是当前状态,底部是我希望它变成的样子)。
| 身份证|代码|群|分钟|分钟1|分钟2|3分钟|
| --------------|--------------|--------------|--------------|--------------|--------------|--------------|
| 1e|x222|1|四点五|四点五|不适用|不适用|
| 1e|x124|1|四点五|四点五|不适用|不适用|
| 1e|x143|二|6.7|不适用|6.7|不适用|
| 1e|x123|二|6.7|不适用|6.7|不适用|
| 1e|x123|二|6.7|不适用|6.7|不适用|
| 1e|x143|三|八点九|不适用|不适用|八点九|
| 1e|x123|三|八点九|不适用|不适用|八点九|
| 身份证|代码|群|分钟1|分钟2|3分钟|
| --------------|--------------|--------------|--------------|--------------|--------------|
| 1e|x222|1|四点五|6.7|八点九|
| 1e|x124|1|四点五|6.7|八点九|
我想找到一种方法,当组1行中的NA(分钟2和3)共享一个id时,用分钟2和3的值填充它们(并删除组2和3的行)。对于id,可以不一定存在组2或组3,并且对于组1,代码的数量变化。
我已经尝试了reshape()、pivot_wider()(在分钟列上)和其他一些东西,但它对我还不起作用。我觉得解决办法很简单,但由于某种原因,我被卡住了。任何建议将不胜感激!如果可能的话,我宁愿在dplyr/tidyverse中这样做。

nqwrtyyt

nqwrtyyt1#

我们可以使用tidyr中的fill在分组后将NA替换为前一个或下一个非NA

library(dplyr)
library(tidyr)
df1  %>% 
  group_by(id) %>% 
  fill(starts_with("minutes"), .direction = "downup") %>%
  ungroup

相关问题