本文介绍了填写信息后删除特定行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要填写有关客户的信息,为了避免重复信息,我需要删除信息的来源。我的数据集如下所示:
dat <- data.frame(datea = c(NA,"202105",NA,NA,"202106",NA,NA,"202110",NA),
client_id = c("aaa","aaa","bbb","ccc","ccc","ddd","eee","eee","eee"),
dateb = c("202105",NA,"202107","202106",NA,"202110","202107",NA,"202107"),
qt_prod1 = c(10,NA,30,2,NA,11,14,NA,145),
qt_prod2 = c(12,NA,433,221,NA,312,312,NA,121))
> dat
datea client_id dateb qt_prod1 qt_prod2
1 <NA> aaa 202105 10 12
2 202105 aaa <NA> NA NA
3 <NA> bbb 202107 30 433
4 <NA> ccc 202106 2 221
5 202106 ccc <NA> NA NA
6 <NA> ddd 202110 11 312
7 <NA> eee 202107 14 312
8 202110 eee <NA> NA NA
9 <NA> eee 202107 145 121
我想要的是某种程度上合并数据集,以便将所有信息放在一行中,但不是按客户端。我不希望客户端BBB的信息中填满了客户端AAA数据。我想要的输出是:
dat2 <- data.frame(datea = c("202105",NA,"202106",NA,"202110",NA),
client_id = c("aaa","bbb","ccc","ddd","eee","eee"),
dateb = c("202105","202107","202106","202110","202107","202107"),
qt_prod1 = c(10,30,2,11,14,145),
qt_prod2 = c(12,433,221,312,312,121))
> dat2
datea client_id dateb qt_prod1 qt_prod2
1 202105 aaa 202105 10 12
2 <NA> bbb 202107 30 433
3 202106 ccc 202106 2 221
4 <NA> ddd 202110 11 312
5 202110 eee 202107 14 312
6 <NA> eee 202107 145 121
谢谢,
推荐答案
library(dplyr)
dat %>%
group_by(client_id) %>%
mutate(across(everything(), ~ sort(., na.last = TRUE))) %>%
filter(rowSums(!is.na(cur_data())) > 0) %>%
ungroup()
# # A tibble: 6 x 5
# datea client_id dateb qt_prod1 qt_prod2
# <chr> <chr> <chr> <dbl> <dbl>
# 1 202105 aaa 202105 10 12
# 2 NA bbb 202107 30 433
# 3 202106 ccc 202106 2 221
# 4 NA ddd 202110 11 312
# 5 202110 eee 202107 14 121
# 6 NA eee 202107 145 312
我要补充的是,这个操作不是干净的:一行中的数据不会一起保留,因此关于行是观测的帧的一个常见假设不会保留(&p>CLEAN&QOOT;):行中的数据不会一起保留,因此关于行是观测的帧的一个常见假设不会保留。这可能是故意的。 这篇关于填写信息后删除特定行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!