在R中我有一个表格,有两行他们的ENSEMBL列信息不同,但他们SYMBOL列的信息相同,我如何保留总的counts多的一行,将counts少的一行删除
时间: 2024-10-21 20:18:16 浏览: 24
在R中,如果你有一个数据框`df`,并且想要保留每个SYMBOL下计数最多的行并删除计数较少的行,你可以使用`dplyr`包提供的功能。首先,你需要对数据按SYMBOL列分组,并计算每个SYMBOL对应的counts的总和。然后,你可以选择group_size最大的行。以下是步骤:
1. 首先,确保已安装了`dplyr`包,如果还没有安装可以运行:
```{r}
if (!require(dplyr)) install.packages("dplyr")
library(dplyr)
```
2. 使用`group_by()`和`summarise()`函数计算每个SYMBOL的总counts:
```{r}
grouped_df <- df %>%
group_by(SYMBOL) %>%
summarise(total_counts = sum(counts))
```
3. 然后,使用`arrange()`函数根据total_counts降序排列数据,再使用`slice_max()`选取每组最大计数的行:
```{r}
final_df <- grouped_df %>%
arrange(desc(total_counts)) %>%
slice(1) %>% # 只取第一行,即最大计数的行
ungroup()
```
4. 最后,`final_df`就是保留了每个SYMBOL总计数最多一行的结果。如果不希望删除计数少的行,只需保存`final_df`;如果你想删除原始数据框中的那些行,可以使用`filter()`:
```{r}
original_df <- df %>%
filter(!row_number() %in% cbind(rownames(final_df), 1)) %>% # 删除不在final_df中的行
select(-ENSEMBL) # 如果不需要ENSEMBL列,可以选择性删除
```
阅读全文