嗨,我陷入了一个奇怪的问题。
我有一个类似以下的数据集:
City =c('XX','YY','XX','XX','YY')
Grade = c('A','B','A','A','B')
Variable1=c(.34,0,.34,0,0)
Variable2=c(.76,.3,0,.76,.3)
Variable3=c(.76,.3,0,.76,0)
Final_data = data.frame(City,Grade,Variable1,Variable2,Variable3)
Final_data <- Final_data[order(City),]
排序后看起来像这样:
如您所见,第1,2和3行代表分配了A级的同一城市(XX)。问题是行重复,有些列的行为0。对于城市XX,我最好只有1行,对于城市YY,我只有1行。 具体地说,在这种情况下,我想要的是针对每个城市和等级,计算每行中的零个数,然后取零个数最少的行。
一种方法可能是:https://stackoverflow.com/a/47914087/3988575。但是,以上删除了所有零行。如果您用 YY城市和B级查看第4行和第5行,则这两行的某些列都带有0。同样,
另一种方法是使用如下所示的唯一功能:https://stackoverflow.com/a/31875208/3988575。在这种情况下,将选择满足条件的第一行。这对我也没有帮助。
预期的输出是这样的:
我该怎么做?任何帮助表示赞赏。
答案 0 :(得分:2)
您可以使用dplyr
,如下所示:
library(dplyr)
Final_data$CountZero <- apply(Final_data[, -(1:2)], 1, function(x) {
sum(x == 0)
})
Final_data %>%
group_by(City, Grade) %>%
filter(CountZero == min(CountZero)) %>%
select(-CountZero)
# A tibble: 2 x 5
# Groups: City, Grade [2]
City Grade Variable1 Variable2 Variable3
<fct> <fct> <dbl> <dbl> <dbl>
1 XX A 0.34 0.76 0.76
2 YY B 0 0.3 0.3