首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R:如何根据另一个变量中的值选择dplyr::dplyr::dplyr()保持的行?

R:如何根据另一个变量中的值选择dplyr::dplyr::dplyr()保持的行?
EN

Stack Overflow用户
提问于 2018-01-22 12:22:35
回答 4查看 8.7K关注 0票数 20

现实生活中的问题:我有核磁共振扫描数据。其中一些已被多次扫描(单独的行)。每一次都会根据不同的程序扫描其中一些。我希望按主题ID保留所有唯一的行,如果在两个不同的协议下扫描了一个主题,我希望它选择一个而不是另一个。

玩具例子:

代码语言:javascript
运行
AI代码解释
复制
library(dplyr)  
df <- tibble(
        id = c("A", "A", "B", "C", "C", "D"), 
        protocol = c("X", "Y", "X", "X", "X", "Y"),
        date = c(seq(as.Date("2018-01-01"), as.Date("2018-01-06"), 
                 by="days")),
        var = 1:6)

我想返回一个数据框架与所有独特的主题通过id。当涉及一个重复值时,我希望它保留以"Y“作为协议的条目,如果它有这种选择的话,而不是自动保留第一个条目,但不保留带有"X”的行。

在本例中,它将保留第2、3、4和6行。

我更喜欢dplyr,但我愿意听取其他建议。

我尝试过的任何东西都没有开始起作用:

代码语言:javascript
运行
AI代码解释
复制
df %>% distinct(id, .keep_all = TRUE) #Nope! 

df %>% distinct(id, protocol == "Y", .keep_all = TRUE) #Nope!  

df$protocol <- factor(df$protocol, levels = c("Y", "X"))
df %>% distinct(id, .keep_all = TRUE) #Nope!  

df %>% group_by(id) %>% filter(protocol == "Y") #Nope!

两个好答案:RobJensen建议

代码语言:javascript
运行
AI代码解释
复制
df %>% arrange(id, desc(protocol == 'Y')) %>% distinct(id, .keep_all = TRUE)  

如果我有多个协议,并且希望指定一个选择它们的顺序,我可以创建一个新的变量,在这个变量中,我按照偏好顺序为协议分配一个整数,然后使用@joran的建议。

代码语言:javascript
运行
AI代码解释
复制
df %>% group_by(id) %>% arrange(desc(protocol),var) %>% slice(1)  

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-01-22 12:53:38

按字母顺序排列在所述的简单情况下是可行的,但如果您想要添加一个protocol_preference变量,则可以按字母顺序排列您希望选择的内容,并选择"Y“,即使它不是按字母顺序排序时的最后一个协议值。

建立在@davechilders回答和@Nathan的想法的基础上建立一个基于“重要性顺序”向量的因素。

代码语言:javascript
运行
AI代码解释
复制
order_of_importance <- c("Y", "Z", "X")

    df2 %>%
      mutate(protocol = factor(protocol, order_of_importance)) %>%
      arrange(id, protocol) %>%
      distinct(id, .keep_all = TRUE)

或者,如果您只想选择'Y‘,而不喜欢所选的内容,如果'Y’是不可否认的,您可以这样做。

代码语言:javascript
运行
AI代码解释
复制
df %>% 
    arrange(id, desc(protocol == 'Y')) %>% 
    distinct(id, .keep_all = TRUE)
票数 8
EN

Stack Overflow用户

发布于 2018-01-22 12:33:28

如果您希望输出是一个不是group_by()的tibble,则无需使用grouped_df就可以实现这一点。

代码语言:javascript
运行
AI代码解释
复制
df %>% arrange(id, desc(protocol)) %>% distinct(id, .keep_all = TRUE)
票数 6
EN

Stack Overflow用户

发布于 2018-01-22 12:29:11

可能有一种更快的方法(几乎可以肯定是使用data.table),但我认为,在dplyr中,这是一种天真的直接方法:

代码语言:javascript
运行
AI代码解释
复制
df %>% group_by(id) %>% arrange(desc(protocol),var) %>% do(head(.,1))

正如@Gregor (现在删除)所指出的,slice(1)可能是do(head(.,1))的一个更好的成语。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48389658

复制
相关文章
dplyr中的行操作
在tidyverse中,整洁数据一般都是每一行是一个观测,每一列是一个变量,基本上所有操作都是基于整洁的数据进行的,都是对某列做什么操作。但有时候我们也需要对某行做一些操作,dplyr中现在提供了rowwise()函数快速执行对行的操作。
医学和生信笔记
2022/11/15
1.4K0
「R」dplyr 行式计算
通常 dplyr 和 R 更适合对列进行操作,而对行操作则显得更麻烦。这篇文章,我们将学习围绕rowwise() 创建的 row-wise 数据框的 dplyr 操作方法。
王诗翔呀
2022/01/21
6.4K0
「R」dplyr 编程
大多数 dplyr 函数使用非标准计算(NSE)。这是一个术语——意味着它们不遵循通常的计算规则。相反,它们捕获你键入的表达式并以自定义的方式对其进行计算。这让 dplyr 代码有两个主要优点:
王诗翔呀
2020/07/03
1.4K0
R语言之 dplyr 包
这个包以一种统一的规范更高效地处理数据框。dplyr 包里处理数据框的所有函数的第一个参数都是数据框名。
timerring
2023/10/13
5500
R语言之 dplyr 包
「R」dplyr 列式计算
同时对数据框的多列执行相同的函数操作经常有用,但是通过拷贝和粘贴的方式进行的话既枯燥就容易产生错误。
王诗翔呀
2022/01/21
2.6K0
「R」dplyr 包使用
summary()函数会对 列 进行处理,并且 创建新的列表 ,简单来说就是把向量作为输入值,输出单个数值。
王诗翔呀
2020/07/03
1.2K0
R tips:dplyr编程
dplyr的函数由于使用tidy evaluation(R中的一种非标准执行(NSE)实现方式)的方法,可以使得其具有更好的易用性:变量不需要绝对引用和引号包裹。
生信菜鸟团
2020/07/02
1.2K0
dplyr中的across操作
dplyr中的across函数取代了之前的xx_if/xx_at/xx_all,用法更加灵活,初学时觉得不如xx_if/xx_at/xx_all简单易懂,用习惯后真是利器!
医学和生信笔记
2022/11/15
7770
「R」数据操作(六):dplyr 排序和选择
arrange()函数工作原理和filter()相似,但它不是选择行,而是改变行的顺序。它使用一个数据框和一系列有序的列变量(或者更复杂的表达式)作为输入。如果你提供了超过一个列名,其他列对应着进行排序。
王诗翔呀
2020/07/06
4.2K0
R数据科学-1(dplyr)
如今数据分析如火如荼,R与Python大行其道。你还在用Excel整理数据么,你还在用spss整理数据么。
Jamesjin63
2022/10/25
1.7K0
R数据科学-1(dplyr)
dplyr包summarize的使用
cyl有4,6,8三种取值,而gear有3,4,5三种取值,应该一共有9组,但我们这里只有8组,原因是cyl=8,gear=4的没有,默认不填补缺失值就会被 drop 掉
爱学习的小明明
2020/09/14
9640
R代码|dplyr包的使用示例
代码来自《r-data-science-quick-reference-master》的内容。
生信交流平台
2020/08/05
1.7K0
数据处理|R-dplyr
arrange函数按给定的列名进行排序,默认为升序排列,也可以对列名加desc()进行降序排序。
生信补给站
2020/08/06
2.1K0
「R」数据操作(七):dplyr 操作变量与汇总
除了选择已存在的列,另一个常见的操作是添加新的列。这就是mutate()函数的工作了。
王诗翔呀
2020/07/06
2.7K0
「R」数据操作(七):dplyr 操作变量与汇总
dplyr_下篇
Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.
火星娃统计
2020/09/15
7230
dplyr-cli:在Linux Terminal上直接执行dplyr
熟悉R的朋友都会知道, dplyr包是对原始的数据集进行清洗、整理以及变换的有力武器之一。但是其使用会局限于你需要有打开R/R studio或者通过R脚本来执行 dplyr。对于这个问题,今天即将需要介绍的 dplyr-cli就能很好的解决这个问题。
生信菜鸟团
2020/05/19
2.2K0
dplyr强大的分组汇总
在现实生活中我们经常会遇到非常多需要分组汇总的情况,单个的汇总价值不大,只有分组之后,才能看出差异,才能表现出数据的价值。
医学和生信笔记
2022/11/15
1.8K0
R语言包_dplyr_2
data_frame() is a better way than data.frame() for creating data frames. Benefits of data_frame():
用户1147754
2019/05/26
7330
R语言包_dplyr_1
有5个基础的函数: - filter - select - arrange - mutate - summarise - group_by (plus)
用户1147754
2019/05/26
1K0
「R」数据操作(八):dplyr 的 do, do, do
关于dplyr的基本操作我已经写过很多笔记了,不再赘述,这篇文章重点介绍 dplyr 的一个函数 do() 的用法。
王诗翔呀
2020/07/06
1.8K0

相似问题

使用R中的dplyr根据行和列值选择行

21

使用dplyr更改r中变量的值

10

使用dplyr根据日期变量筛选行

13

如何在r中使用dplyr::dplyr()命令的外部变量列表?

19

使用dplyr根据多列中的行值选择列

05
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档