我有一个如下所示的数据帧:

ID <- c(1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 5)
Type <- c('A','B','C','B', 'C','A','B', 'C','A','C', 'C')
Value <- c(10, 11, 12, 1, 2, 100, 101, 102, -1, -2, -10)

df <- data.frame(ID, Type, Value)

我的目标是一个dataframe,每个ID只有一行.但我想根据特定的标准/瀑布原则 Select 行.

所以首选A型,然后是B型,然后是C型.我的目标是以下数据帧:

ID <- c(1, 2, 3, 4, 5)
Type <- c('A','B','A','A', 'C')
Value <- c(10, 1, 100, -1, -10)

df_goal <- data.frame(ID, Type, Value)

我想先转成宽幅格式,然后使用dplyr::coalesce,但之后我会松开类型列.我很确定使用dplyr::group_bydplyr::summarise有一个解决方案.起初,我还想过在dplyr::filter语句中使用dplyr::if_else,但我认为这是不可能的.

感谢您的帮助!

推荐答案

dplyr中,使用slice_min,默认情况下,它按变量排序的组过滤最小值(这里是Type,按字母顺序排序).

library(dplyr)
df %>% 
  group_by(ID) %>% 
  slice_min(Type)

# A tibble: 5 × 3
# Groups:   ID [5]
     ID Type  Value
  <dbl> <chr> <dbl>
1     1 A        10
2     2 B         1
3     3 A       100
4     4 A        -1
5     5 C       -10

在R基中:

df[with(df, Type == ave(Type, ID, FUN = min)), ]

R相关问答推荐

R根据条件进行累积更改

Select 季度月值

如何将SAS数据集的列名和列标签同时包含在r中GT表的表首?

Geom_Hline将不会出现,而它以前出现了

来自程序包AFEX和amp;的类/函数和NICE_TABLE&冲突

停止ggplot将多行减少到一行

Ggplot2如何找到存储在对象中的残差和拟合值?

如何在R中创建这些列?

希望解析和复制R中特定模式的数据

对数据帧中的列进行子集设置以通过迭代创建新的数据帧

使用grepl过滤特定列范围内的列名

R Bupar:获取每个 case 的踪迹

如何从R调用Amazon销售合作伙伴API?

对数据帧中的大量组合执行Kruskal-Wallis测试

当某些实验治疗被审查了75%时,使用/后继测试意味着在r中使用

与另一个数据帧同名的变异/筛选列

我想看看一个字符串值是否适合R中另一个字符串值的范围

如何在R中使用ggplot2将面图与面标签对齐

将数据框特定列中的数字舍入到最接近的季度

根据其它列和相关非零值的个数过滤数据帧