Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用dplyr中的列名向量查找跨列的最大行数

使用dplyr中的列名向量查找跨列的最大行数
EN

Stack Overflow用户
提问于 2019-04-10 19:30:55
回答 4查看 794关注 0票数 4

我在一个字符向量中有一个很长的列名列表,这些列名指的是各种药物。我喜欢将该列表放在代码的顶部,以便于编辑和引用脚本中不同位置的药物组。我想使用dplyr获取药物的最大行数,方法是向它提供预定义的列名向量,以找到最大行数。似乎有一个简单的解决办法,但今天我想不起来了……

我尝试了下面的代码,但它返回列名列表中的一个名称。

我还尝试了使用get()、select()和do.call()的各种排列,试图让R以不同的方式读取字符向量,但我无法弄清楚……

代码语言:javascript
运行
AI代码解释
复制
data(mtcars)

colnames <- c("vs", "am", "gear", "carb")

df <- mtcars %>%
  rowwise() %>%
  mutate(max = max(colnames))

编辑:我希望在新的列中显示最大值。例如,我希望输出如下所示:

代码语言:javascript
运行
AI代码解释
复制
vs am gear carb MAX
0  1   4    4    4
0  1   4    4    4
1  1   4    1    4
1  0   3    1    3
0  0   3    2    3
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-04-10 20:13:20

这可能不是最dplyr的答案,但您可以始终在mutate中使用apply

代码语言:javascript
运行
AI代码解释
复制
mtcars %>%
  mutate(max_val = apply(., 1, function(x) max(x[col_names]))) %>%
  head()

   mpg cyl disp  hp drat    wt  qsec vs am gear carb max_val2 max_val
1 21.0   6  160 110 3.90 2.620 16.46  0  1    4    4        4       4
2 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4        4       4
3 22.8   4  108  93 3.85 2.320 18.61  1  1    4    1        4       4
4 21.4   6  258 110 3.08 3.215 19.44  1  0    3    1        3       3
5 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2        3       3
6 18.1   6  225 105 2.76 3.460 20.22  1  0    3    1        3       3

或者,您可以这样做:

代码语言:javascript
运行
AI代码解释
复制
mtcars$max_val2 <- mtcars %>%
  select(col_names) %>%
  transmute(apply(., 1, max)) %>%
  pull()
head(mtcars)

                   mpg cyl disp  hp drat    wt  qsec vs am gear carb max_val2
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4        4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4        4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1        4
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1        3
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2        3
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1        3
票数 0
EN

Stack Overflow用户

发布于 2019-04-10 19:56:28

你也可以整理数据,首先让它变长,然后找到最大值并将其连接到原始数据上。注意在这里你必须使用gather_(),所有的名字都用引号括起来,这样你才能引用你的向量。在这个例子中,我使用汽车作为你的药物,并没有解决是否有一个最大价值的平局。

代码语言:javascript
运行
AI代码解释
复制
library(dplyr)
library(tidyr)
colnames <- c("vs", "am", "gear", "carb")

df <- mtcars %>%
      mutate(nms = row.names(mtcars)) 
#transpose then find max value and keep max value
dfx <-  tidyr::gather_(df, 'nms2','vals', colnames) %>% 
        group_by(nms) %>% 
        mutate(max = max(vals)) %>% 
        ungroup %>% 
        filter(max == vals)
#join back on to data with column name and max value 
mt2 <- left_join(df,select(dfx, nms, vals,nms2),by='nms')

使用pmax和更少的代码

您可以在do.call中使用pmax来设置行式最大值

代码语言:javascript
运行
AI代码解释
复制
df <- mtcars %>% 
      mutate(mx2 = do.call(pmax,mtcars[,colnames]))
票数 1
EN

Stack Overflow用户

发布于 2021-08-09 05:19:44

在初始尝试中使用c_across似乎是可行的:

代码语言:javascript
运行
AI代码解释
复制
mycols <- c("vs", "am", "gear", "carb")

df <- mtcars %>% 
  rowwise() %>%
  mutate(MAX = max(c_across(all_of(mycols)))) 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55620024

复制
相关文章
使用dplyr进行数据转换
dplyr最常用的5个函数: • 按值筛选观测(filter())。 • 对行进行重新排序(arrange())。 • 按名称选取变量(select())。 • 使用现有变量的函数创建新变量(mutate())。 • 将多个值总结为一个摘要统计量(summarize())。 函数的使用方法: (1) 第一个参数是一个数据框。 (2) 随后的参数使用变量名称(不带引号)描述了在数据框上进行的操作。 (3) 输出结果是一个新数据框。
生信编程日常
2020/04/01
1.1K0
R语言第二章数据处理⑦dplyr包(2)列处理目录列名
还有另一个选项可以避免连续重新输入列名:one_of()。 您可以预先设置列名,然后在select()语句中通过将它们包装在one_of()中或使用!!运算符来引用它们。
用户1359560
2018/12/28
1.9K0
LeetCode 1072. 按列翻转得到最大值等行数(查找相同的模式,哈希计数)
给定由若干 0 和 1 组成的矩阵 matrix,从中选出任意数量的列并翻转其上的 每个 单元格。 翻转后,单元格的值从 0 变成 1,或者从 1 变为 0 。
Michael阿明
2020/07/13
2.3K0
数据处理|R-dplyr
arrange函数按给定的列名进行排序,默认为升序排列,也可以对列名加desc()进行降序排序。
生信补给站
2020/08/06
2.1K0
使用dplyr进行数据分析:入门篇
tidyverse系列应该算是R语言数据分析中的瑞士军刀了,统一的格式,简洁的代码,管道符便于阅读的形式,都能让大家快速上手。R数据科学就是专门讲这个系列的,但是对于很多函数的用法和细节问题,都没有说,所以在使用时还是会经常遇到各种问题。
医学和生信笔记
2022/11/14
1.5K0
dplyr包summarize的使用
cyl有4,6,8三种取值,而gear有3,4,5三种取值,应该一共有9组,但我们这里只有8组,原因是cyl=8,gear=4的没有,默认不填补缺失值就会被 drop 掉
爱学习的小明明
2020/09/14
9680
查找-散列查找
散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。查找时,根据这个确定的对应关系找到给定值key的映射f(key),若查找集合中存在这个记录,则必定在f(key)的位置上。
全栈程序员站长
2022/08/28
1.5K0
查找-散列查找
dplyr中的行操作
在tidyverse中,整洁数据一般都是每一行是一个观测,每一列是一个变量,基本上所有操作都是基于整洁的数据进行的,都是对某列做什么操作。但有时候我们也需要对某行做一些操作,dplyr中现在提供了rowwise()函数快速执行对行的操作。
医学和生信笔记
2022/11/15
1.4K0
dplyr中的across操作
dplyr中的across函数取代了之前的xx_if/xx_at/xx_all,用法更加灵活,初学时觉得不如xx_if/xx_at/xx_all简单易懂,用习惯后真是利器!
医学和生信笔记
2022/11/15
7820
Pandas 查找,丢弃列值唯一的列
数据清洗很重要,本文演示如何使用 Python Pandas 来查找和丢弃 DataFrame 中列值唯一的列,简言之,就是某列的数值除空值外,全都是一样的,比如:全0,全1,或者全部都是一样的字符串如:已支付,已支付,已支付…
萝 卜
2022/05/12
6.6K0
Pandas 查找,丢弃列值唯一的列
散列查找和哈希查找_散列检索
散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。建立了关键字与存储位置的映射关系,公式如下:
全栈程序员站长
2022/11/15
9670
Java 查找 List 中的最大值、最小值Java 查找 List 中的最大值、最小值
Java 查找 List 中的最大值、最小值 java> List<Long> list = new ArrayList(); java.util.List<java.lang.Long> list = [] java> list.add(1L) java.lang.Boolean res1 = true java> list.add(2L) java.lang.Boolean res2 = true java> Collections.max(list) java.lang.Long res3 = 2 j
一个会写诗的程序员
2018/08/17
4.3K0
散列查找
散列同顺序、链接和索引一样,是又一种数据存储方法。散列存储的方法是:以数据集合中的每个元素的关键字k为自变量,通过一种函数h(k)计算出函数值,把这个值用做一块连续存储空间(即数组或文件空间)中的元素存储位置(即下标),将该元素存储到这个下标位置上。散列存储中使用的函数h(k)被称为散列函数或哈希函数,它实现关键字到存储位置(地址)的映射(或称转换),h(k)被称为散列地址或哈希地址;使用的数组或文件空间是对数据集合进行散列存储的地址空间,所以被称为散列表或哈希表。在散列表上进行查找时,首先根据给定的关键字k,用与散列存储时使用的同一散列函数h(k)计算出散列地址,然后按此地址从散列表中取出对应的元素。
全栈程序员站长
2022/08/27
1.3K0
散列查找
javacsv 根据列名获取不到第一列问题
发现有一列通过get(String columnName)方式获取不到,其他列都可以,而且名称反复核对都OK。
明明如月学长
2021/08/27
1.1K0
《高效R语言编程》6--高效数据木匠
将你的数据整理好是一个可敬的、某些情况下是至关重要的技能,所以作者使用了数据木匠这个词。这是本书最重要的一章,将涉及以下内容:
用户1075469
2021/07/27
2K0
「R」使用gt包创建表格入门
gt包所做的一切都是为了更简单地生成好看的展示表格。展示表格?是的,我们正在尝试将数据表格(如tibbles、data.frame)和你在网页、期刊文章或者杂志中的表格区分开来。后面这种表格可以称为展示表格、汇总表格或者真实的表格。下面是一些网站上的例子:
王诗翔呀
2020/07/06
4.8K0
「R」使用gt包创建表格入门
R语言入门(一)之数据处理
写在前面:公众号又被我搁置好久,闲来无事,写写近期学的R语言吧,主要分为两个部分写,一主要为数据处理,二为ggplot作图。这两个部分将生信分析的绝大多数常用命令都讲到了,作为R语言入门是够用的,但是学海无涯,以此只是作为一个引子,想要进步还是要自己多学多练,举一反三才行。
生信real
2020/08/26
10.4K0
R语言入门(一)之数据处理
R语言 数据框、矩阵、列表的创建、修改、导出
数据框来源主要包括用代码新建(data.frame),由已有数据转换或处理得到(取子集、运算、合并等操作),读取表格文件(read.csv,read.table等)及R语言内置数据
Magnolia
2023/01/06
8.3K0
R代码|dplyr包的使用示例
代码来自《r-data-science-quick-reference-master》的内容。
生信交流平台
2020/08/05
1.7K0
点击加载更多

相似问题

使用dplyr mutate根据列名的向量创建新列

38

dplyr中列名向量的行()和

55

如何引用dplyr中的其他列名跨

12

使用列名的字符向量进行dplyr变异

11

如何使用R map / dplyr中的向量引用列名

17
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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