r - 如何删除R中的重复行?

标签 r dplyr

我在 R 中拥有以下数据框(对于熟悉 tidyverse 的人来说,这是 starwars 示例数据集)enter image description here

我正在尝试创建一个输出两列的 tibble:homeworldshortest_5(来自该 homeworld 的最矮 5 个人的平均高度)。

下面是我的代码;

df<-starwars %>%
  group_by(homeworld) %>%
  filter(!is.na(height), !is.na(homeworld)) %>%
  arrange(desc(height)) %>%
  mutate(last5mean = mean(tail(height, 5))) %>%
  summarize(shortest_5=last5mean, number=n()) %>%
  filter(number>=5, ) 
df

看来我已经成功地做到了(虽然很困惑)。我的问题是,虽然我的 tibble 确实列出了 homeworldshortest_5,但它重复了同一 homeworld 的多个实例。

enter image description here

似乎是一个简单的修复,但我无法完全理解它!任何帮助将不胜感激!

最佳答案

您可以大大缩短代码:

df<-starwars %>%
  group_by(homeworld) %>%
  filter(!is.na(height), !is.na(homeworld), n() >=5) %>%
  summarize(shortest_5 = mean(if_else(rank(height) > 5, NA_integer_, height), na.rm = TRUE))

df

# # A tibble: 2 x 2
#   homeworld shortest_5
#   <chr>          <dbl>
# 1 Naboo           151.
# 2 Tatooine        153.

注意:

  • 我得到的结果与你不同,例如在 Naboo 上,最短的 5 个字符的高度为:96、157、165、165、170。这 5 个值的平均值是 150.6。
  • 您不应该拥有以下值:科洛桑,因为来自那个家乡的角色只有 3 个。仅有的两个至少有 5 个角色的家园世界是纳布和塔图因。

关于r - 如何删除R中的重复行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66118827/

相关文章:

r - 使用 get() 从卸载的包中调用函数而不使用库

r - R 中按组划分的因子水平百分比

R:使用 dplyr 计算提前 1 小时的出现次数

r - 在 mutate 管道中按组获取唯一 ID

R:调整给定的时间序列但保持汇总统计相等

python - Pandas 被意外的分隔符搞糊涂了

r - 使用 roxygen2 v4 导出名称中带有点的非 S3 方法

r - 如何从 R 中变量的每个级别中采样相同数量的单位?

r - 可用于 R 中任何存储的 Manipulate 函数

r - 使用 tidyverse 计算 NA 的条件和?