首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

获取R中每行的最后一个非零列名,并创建一个单独的列

在R中获取每行的最后一个非零列名,并创建一个单独的列,可以通过以下步骤实现:

  1. 首先,我们需要使用R中的apply函数来遍历每一行数据。apply函数可以对矩阵或数据框的行或列进行操作。
  2. 使用apply函数时,我们需要指定MARGIN参数为1,表示按行进行操作。
  3. 在apply函数中,我们可以使用一个自定义的函数来处理每一行的数据。在这个函数中,我们可以使用tail函数来获取每行的最后一个元素。
  4. 接下来,我们可以使用ifelse函数来判断最后一个元素是否为零。如果是零,则返回空字符串;如果不是零,则返回最后一个非零列名。
  5. 最后,我们可以将这个新的列添加到原始数据框中,以创建一个单独的列。

以下是一个示例代码:

代码语言:R
复制
# 创建一个示例数据框
data <- data.frame(
  A = c(1, 2, 3, 4),
  B = c(0, 0, 5, 6),
  C = c(7, 8, 0, 0),
  D = c(0, 0, 0, 9)
)

# 定义一个函数来获取每行的最后一个非零列名
getLastNonZeroCol <- function(row) {
  last_nonzero_col <- tail(names(row)[row != 0], 1)
  ifelse(is.na(last_nonzero_col), "", last_nonzero_col)
}

# 使用apply函数遍历每一行数据,并创建一个新的列
data$LastNonZeroCol <- apply(data, 1, getLastNonZeroCol)

# 打印结果
print(data)

这段代码将会输出以下结果:

代码语言:txt
复制
  A B C D LastNonZeroCol
1 1 0 7 0              C
2 2 0 8 0              C
3 3 5 0 0              B
4 4 6 0 9              D

在这个示例中,我们创建了一个包含四列的数据框。然后,我们使用apply函数遍历每一行数据,并使用getLastNonZeroCol函数获取每行的最后一个非零列名。最后,我们将这个新的列添加到原始数据框中。结果显示了每行的最后一个非零列名。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Excel公式技巧93:查找某行中第一个非零值所在的列标题

有时候,一行数据中前面的数据值都是0,从某列开始就是大于0的数值,我们需要知道首先出现大于0的数值所在的单元格。...例如下图1所示,每行数据中非零值出现的位置不同,我们想知道非零值出现的单元格对应的列标题,即第3行中的数据值。 ?...图2 在公式中, MATCH(TRUE,B4:M40,0) 通过B4:M4与0值比较,得到一个TRUE/FALSE值的数组,其中第一个出现的TRUE值就是对应的非零值,MATCH函数返回其相对应的位置...MATCH函数的查找结果再加上1,是因为我们查找的单元格区域不是从列A开始,而是从列B开始的。...ADDRESS函数中的第一个参数值3代表标题行第3行,将3和MATCH函数返回的结果传递给ADDRESS函数返回非零值对应的标题行所在的单元格地址。

9.9K30
  • MySQL基础笔记

    使用IO流的技术将数据保存到本地文件中 但是接下来我有这样一个需求:将下面的user.txt文件中的王五年龄修改为35 张三 23 男 李四 24 男 王五 25 女 赵六 26 女 周七 27 男 我们要如何实现呢...数据库 用于存储和管理数据的仓库 一个库中可以包含多个数据表 数据表 数据库最重要的组成部分之一 它由纵向的列和横向的行组成(类似excel表格) 可以指定列名、数据类型、约束等 一个表中可以存储多条数据...列名n 数据类型n ); -- 注意:最后一列,不需要加逗号 数据类型 1. int:整数类型 * age int 2. double:小数类型 * score double(5,2) * price...-- 查询名称中包含电脑的商品信息 SELECT * FROM product WHERE NAME LIKE '%电脑%'; 聚合函数 将一列数据作为一个整体,进行纵向的计算 聚合函数分类 函数名...一张表只能有一个列作为主键 主键一般用于表中数据的唯一标识 建表时添加主键约束 -- 标准语法 CREATE TABLE 表名( 列名 数据类型 PRIMARY KEY, 列名 数据类型,

    2.8K30

    爬虫入门指南(2):如何使用正则表达式进行数据提取和处理

    首先,使用open()函数打开一个文件,传入两个参数:文件名和打开模式。打开模式可以是 “w”(写入)、“a”(追加)、“r”(只读)等。如果文件不存在,将会创建一个新的文件。...使用SQLite数据库存储数据的示例代码 SQLite基本语法 创建表格: 使用CREATE TABLE语句创建新的表格。指定表格的名称和列定义。每个列都包括列名和数据类型。...我们创建了一个名为"users"的表格,包含id、name和age三个列。...我们首先使用sqlite3.connect()函数连接到名为"data.db"的SQLite数据库,并创建一个游标对象。...然后,我们定义了一条SQL语句,用于向名为"users"的表中插入数据。最后,我们使用cursor.executemany()方法批量执行插入操作,并通过conn.commit()保存更改。

    34710

    Spring认证中国教育管理中心-Spring Data R2DBC框架教程六

    对不同的值使用相同的字段/列名称通常会导致数据损坏,因此您应该使用明确的字段/列名称来注释至少一个属性。 using@AccessType(PROPERTY)不能使用,因为不能设置超级属性。...转换器使用任何注册的 Spring 转换器来覆盖对象属性到行列和值的默认映射。 对象的字段用于在行中的列之间进行转换。JavaBean不使用公共属性。...如果您有一个非零参数构造函数,其构造函数参数名称与行的顶级列名称匹配,则使用该构造函数。否则,将使用零参数构造函数。如果有多个非零参数构造函数,则会引发异常。...AbstractR2dbcConfiguration创建一个DatabaseClient实例并将其注册到名为 的容器中databaseClient。...请参阅乐观锁定以获取更多参考。 映射元数据基础结构在与spring-data-commons技术无关的单独项目中定义。在 R2DBC 支持中使用特定的子类来支持基于注释的元数据。

    2.1K20

    MADlib——基于SQL的数据挖掘解决方案(4)——数据类型之矩阵

    上面的例子只用6行表示一个4x7的矩阵中的非零元素。矩阵的行列元素个数分别由row_id和col_id的最大值指定。...上面的例子将稠密矩阵转为稀疏表示,并新建表存储转换结果。源表的两列类型分别是整型和整型数组,输出表包含三列,行ID列名与源表相同,列ID列和值列由参数指定。...返回值为数组类型,如果最后一个参数为‘true’,表示结果表中包含最大最小值对应的下标数组列。...一个mXm矩阵A有逆矩阵,当且仅当矩阵的秩R(A)=m,此时方阵A的行列式不为零,即|A|≠0,称A为非奇异矩阵或满秩矩阵,否则称A为奇异矩阵或降秩矩阵。满秩方阵的行、列向量组都是线性无关的。...从概念上讲,一个mXm矩阵有逆矩阵,当且仅当它把每个非零m维行(列)向量都映射到一个唯一的非零m维行(列)向量。在求解各种矩阵方程时,逆矩阵的存在性是很重要的。

    2K10

    Python读取JSON键值对并导出为.csv表格

    ,而值则是这一列对应的值;因为这个JSON数据中包含很多个text(每一个text中的所有键都是一样的,但是值不完全一致),所以我们最后就会得到一个具有很多行的.csv格式文件。   ...随后,创建一个空集合fieldnames,用于存储将在CSV文件的头部写入的列名。   紧接着,我们遍历data列表中的每个元素,其中每个元素是一个包含JSON格式的字符串的字典。...对于每个元素,将JSON文本——也就是item['text']解析为字典,并获取该字典中的所有键。这些键将被添加到fieldnames集合中,以便稍后在CSV文件的头部(列名称)使用。   ...其次,创建一个CSV文件output.csv以进行写入,使用csv.DictWriter对象初始化,其中指定了要写入的列名(通过fieldnames变量)。...最后,遍历data列表中的每个元素,对于每个元素,将JSON文本解析为字典,并将该字典的数据写入CSV文件中,每行对应一个JSON对象。

    39710

    R语言中管道操作符 %>%, %T>%, %$% 和 %%

    这些操作符都是来自于一个叫做magrittr的R包,所以我们先来安装一下。...2.求这个10000个数的绝对值,然后乘以50。 3.把结果转换成一个100行100列的矩阵。 4.计算矩阵中每行的均值,并四舍五入只保留整数。 5.把结果除以7求余数,并话出余数的直方图。...3.把结果转换成一个100行100列的矩阵。 4.计算矩阵中每行的均值,并四舍五入只保留整数。 5.把结果除以7求余数,并话出余数的直方图。...比如,我们获得一个data.frame类型的数据集,通过使用 %%,在右侧的函数中可以直接使用列名操作数据。...下面定义一个10行3列的data.frame,列名分别为x,y,z,获取x列大于5的数据集。使用 %$% 把列名x直接传到右侧进行判断。这里.代表左侧的完整数据对象。

    4.7K30

    【生信技能树培训笔记】R语言基础(20230112更新)

    (一)在R中新建项目方式:RStudio中,菜单栏File→NewProject→NewDirectory→NewProject→DirectoryName该方式通过新建一个目录的方式来新建一个项目,创建一个...数据框要求每一列只能有一种数据类型,且数据框只是R语言内部的一个数据,不是一个文件。- 数据框单独拿出来的一列是一个向量,视为一个整体。一个向量可以出自数据框的一列,也可以用代码生成。...#取数据框最后一列(不知道具体列数)> df1[,ncol(df1)] #函数ncol()求出数据框的总列数,最后一列即为第“总列数”列。...指定的列名称取交集,其余列均包含在新数据框中。...或者进行单独指定。默认all=FALSE,表示只取共同列或行中相同值的内容进行合并,当指定all=TRUE时,取两个数据框中指定行列的并集进行合并,任一表中的缺失值,则用NA填充。

    4.1K51

    矩阵的三种存储方式---三元组法 行逻辑链接法 十字链表法

    若对其进行压缩存储,我们可以将一个非零数组元素的三元看成一个单位存入一维数组,具体如下所示。比如(1,1,1)代表第一行第一列的元素值为1。注意,这里我们只存储非零值。 ?   ...我们可以使用一个一维数组来存储每行第一个非零元素在一维数组中的位置,这样就可以提升访问效率。这样的表就叫做行逻辑链接的顺序表。   ...2.使用数组 rpos 记录矩阵中每行第一个非 0 元素在一维数组中的存储位置。 ?   通过以上两步操作,即实现了使用行逻辑链接的顺序表存储稀疏矩阵。   ...; //每行第一个非零元素在data数组中的位置 int rpos[MAXRC]; //行数,列数,元素个数 int row,column,number; }RLSMatrix...;   下面我们将要根据用户输入的行数,列数,非零元素的值,来创建矩阵。

    1.4K40

    用 Pandas 做 ETL,不要太快

    ETL 是数据分析中的基础工作,获取非结构化或难以使用的数据,把它变为干净、结构化的数据,比如导出 csv 文件,为后续的分析提供数据基础。...一旦你有了密钥,需要确保你没有把它直接放入你的源代码中,因此你需要创建 ETL 脚本的同一目录中创建一个名为 config.py 的文件,将此放入文件: #config.py api_key = 创建一个名为 tmdb.py 的文件,并导入必要的依赖: import pandas as pd import requests import config 向 API 发送单个 GET 请求的方法...的列名称列表,以便从主数据帧中选择所需的列。...genres_all 的临时列,作为电影类别的代表,我们只需要 genres 内的 name 属性,稍后把它扩展为单独的列: result = [] for l in genres_list:

    3.3K10

    pandas数据清洗,排序,索引设置,数据选取

    ---- df.isnull() df的空值为True df.notnull() df的非空值为True 修改列名 df.rename(columns = {'key':'key2'},inplace...df.dropna(how='all')# 一行中全部为NaN的,才丢弃该行 df.dropna(thresh=3)# 每行至少3个非空值才保留 缺失值填充fillna() df.fillna(0)...columns=states ) set_index() 将DataFrame中的列columns设置成索引index 打造层次化索引的方法 # 将columns中的其中两列:race和sex...() 将使用set_index()打造的层次化逆向操作 既是取消层次化索引,将索引变回列,并补上最常规的数字索引 df.reset_index() ---- 数据选取 [] 只能对行进 行(...Label切片 # df.loc[A,B] A是行范围,B是列范围 df.loc[1:4,['petal_length','petal_width']] # 需求1:创建一个新的变量 test # 如果

    3.3K20

    【Python】数据评估

    结构方面需要清理的数据叫做乱数据,结构方面不需要清理的数据叫做整洁数据。 2. 整洁数据有以下特点:(列是属性,行是示例) 每列是一个变量。 每行是一个观察值。 每个单元格是一个元素值。...DataFrame.info()方法可以提供数据的概况信息,包括行(列)的数量、列名、列对应的数据类型 、非空缺值的数量,从宏观上进行评估。 2....但这种方法不会修改原来的图表,而是会返回一个新的修改后的图表。 2. 使用set_index("列名")方法可以把这个列名作为索引,并返回一个新的图表。...而reset_index()方法可以把当前索引作为一列的列名,然后使用位置索引,并返回一个新的图表。...整洁的数据要求: 每列是一个变量。 每行是一个观察值。 每个单元格是一个元素值。 2. 如果一个列出现了两个变量,那么就需要对这列进行拆分。

    7700

    2分钟,快速认识什么是SQL语言

    它最初是在 70 年代初开发的,用于修改和检索 IBM System R 数据库中的数据。到 1986 年,它被标准化为语法,至今在技术应用中仍然非常流行。...关系数据库将数据组织到表中,有点像 Excel 电子表格,其中列包含数据的属性或类型。 每行代表一个单独的记录或数据点,具有自己的唯一 ID(称为主键)。...我们可以通过从一行获取唯一 ID,并将其存储在不同表的不同行中称为外键的特殊列中来建立数据点之间的关系。 在球队表中,球队ID是主键,但在球员表中,它是外键。...现在,SQL 的作用不仅是读取、创建、更新和删除数据,而且还根据数据中嵌入的关系将数据连接在一起。 SQL语法由几个关键部分组成。...列名和表名被称为标识符 但我们可能不需要表中的每一行,因此我们使用 WHERE 关键字过滤结果,以仅包含满足特定条件的记录。

    20410

    python数据分析——详解python读取数据相关操作

    最后看下read_csv/table的全部相关参数 1.filepath_or_buffer:(这是唯一一个必须有的参数,其它都是按需求选用的) 文件所在处的路径 2.sep: 指定分隔符,默认为逗号...多列的话,会看到一个分层索引 7.prefix: 给列名添加前缀。...,然后将每一行的数据作为一个元素存到设定好的list中,所以最终得到的是一个list。...使用python I/O 读取CSV文件 使用python I/O方法进行读取时即是新建一个List 列表然后按照先行后列的顺序(类似C语言中的二维数组)将数据存进空的List对象中,如果需要将其转化为...cols = sheet1.col_values(3)#获取列内容 readline读取txt #第一种方法 f = open("data.txt","r") #设置文件对象 line = f.readline

    3.1K30

    14个实战案例带你了解Linux的‘sort’命令

    本文的目标是通过14个实际的范例让你更深刻的理解如何在Linux中使用sort命令。 ? 实战演示 1、目标文件创建 首先创建一个用于执行‘sort’命令的文本文件(tecmint.txt)。...5、逆序排列 现在使用‘-r’参数对‘tecmint.txt’文件内容进行逆序排序,并将输出内容重定向到‘reversesorted.txt’文件中,并使用cat命令查看文件的内容。 ? ?...当想基于文件中的数值列对文件进行排序时,必须要使用‘-n’参数。 ? 8、基于某列名称排序 基于第9列(文件和目录的名称,非数值)对文件‘lsl.txt’进行排序。 ? ?...排序规则: 除非指定了‘-r’参数,否则排序的优先级按下面规则排序 以数字开头的行优先级最高 以小写字母开头的行优先级次之 待排序内容按字典序进行排序 默认情况下,‘sort’命令将带排序内容的每行关键字当作一个字符串进行字典序排序...基于第2,5(数值)和9(非数值)列对‘ls -l’命令的输出进行排序。 ? ? ? ----

    4.6K40

    初识数据库

    1,库(data文件夹中的文件夹,每创建一个库 , 这个库的名称就是文件夹的名称,文件夹里面保存着一些这个库相关的初始信息) 增:create database db1 charset utf8; #创建一个库...,这里指定的是两个字段列,id和name列,id和name是列名(字段名),id 后面的int的意思说id这一列中的数 据只能是int类型的,name后面的char的意思是,name这一列中的数据只能是...(1,'dsb1'),(2,'dsb2'),(3,'dsb3'); #往t1表中插入三行数据,注意你插入的每行内容都要和你创建表的时候的字段个数和字段属性对应好,注意每行数据以逗号分隔.   ...删:delete from t1 where id=1; #删除id为1的行 清空表:   delete from t1; #如果有自增id,新增的数据,仍然是以删除前的最后一样作为起始.   ...truncate table t1;数据量大,删除速度比上一条快,且直接从零开始.

    61510

    R语言TCGA-Assembler包下载TCGA数据

    双下划线“__”用于分隔文件名中的五个组件。如果outputFileName是一个空字符串,则文件名只包含其他四个组件。 所有数据文件都具有相同的格式。第一行包括列名,而每一行对应一个DNA片段。...第一行是样本的TCGA条形码,其他每行对应于一个外显子。第一栏是外显子的基因组坐标。从第二列开始的样本数据。...第5栏是该基因的基因组定位。从第6列开始,每两列对应一个示例,其中第一列为Log Ratio,第二列为非共享Log Ratio。...在结直肠癌蛋白质组数据文件(COAD,READ)中,第一行是样品的列名和TCGA条形码,其余每行对应于一种蛋白质。第一列显示蛋白质的基因符号。第二栏是基因描述。第三列是 organism。...在OV的糖蛋白组数据文件中,仅包含Log Ratio数据。第一行是列名和TCGA示例条形码,其他每行对应于一个糖基化产物。第一列显示糖酸盐的位置。第二列是肽序列。第三列是基因符号。第四列是有机体。

    4.8K30

    R语言基础-数据清洗函数pivot_longer

    names_to:一个字符向量,指定要根据存储在 cols 指定的数据的列名中的信息创建一个或多个新列。如果长度为 0,或者如果提供了 NULL,则不会创建任何列。...如果长度为 1,将创建一个包含 cols 指定的列名的列。如果长度>1,将创建多个列。在这种情况下,必须提供 names_sep 或 names_pattern 之一来指定如何拆分列名。...如果这些参数没有给您足够的控制权,请使用 pivot_longer_spec() 创建一个规范对象并根据需要手动处理。...原型(或简称 ptype)是一个零长度向量(如 integer() 或 numeric()),它定义了向量的类型、类和属性。如果您想确认创建的列是您期望的类型,请使用这些参数。...values_to:一个字符串,指定要从存储在单元格值中的数据创建的列的名称。

    6.8K30

    【数据结构】数组和字符串(八):稀疏矩阵的链接存储:十字链表的创建、插入元素、遍历打印(按行、按列、打印矩阵)、销毁

    稀疏矩阵是指大部分元素为零的矩阵,而十字链表可以有效地存储和操作这种类型的矩阵。在稀疏矩阵的十字链表中,每个非零元素都由一个节点表示。...节点包含了几个字段: LEFT:指向该节点在同一行中的左邻非零元素的地址信息。 UP:指向该节点在同一列中的上邻非零元素的地址信息。 ROW:存储该节点在矩阵中的行号。...由于行和列都是循环链表,行表头节点 BASEROW[i] 中的 LEFT 指针循环地链接到该行最右边的非零元素,列表头节点 BASECOL[j] 中的 UP 指针循环地链接到该列最下边的非零元素。...遍历每一列,从第一列到最后一列: 通过列表头节点数组获取当前列的列链表头节点。 遍历列链表中的每个节点: 释放当前节点的内存,并将当前节点指针移动到下一个节点。...创建一个新的节点,并将行、列和值存储在节点的相应字段中。

    25510
    领券