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

如何在data.table列表中用一个函数赋值多个列?

在data.table列表中使用一个函数赋值多个列的方法是使用:=运算符。:=运算符用于在data.table中进行列赋值操作。以下是具体的步骤:

  1. 使用:=运算符将函数应用于多个列。语法为DT[, (colnames) := function(.SD), by = (grouping variables)],其中DT是data.table对象,(colnames)是要赋值的列名,function(.SD)是要应用的函数,.SD表示当前数据表的子集,by是可选的分组变量。
  2. 在函数中,可以使用.SD来引用当前数据表的子集,使用列名来引用列。例如,.SD[, new_column := sum(old_column), by = (grouping variables)]将根据分组变量计算old_column的总和,并将结果赋值给new_column
  3. 如果要使用多个函数赋值多个列,可以在函数中使用逗号分隔多个赋值语句。例如,.SD[, c(new_column1, new_column2) := list(sum(old_column1), mean(old_column2)), by = (grouping variables)]将根据分组变量计算old_column1的总和并赋值给new_column1,计算old_column2的平均值并赋值给new_column2

以下是一个示例:

代码语言:R
复制
library(data.table)

# 创建一个示例data.table
DT <- data.table(
  group = c("A", "A", "B", "B"),
  old_column1 = c(1, 2, 3, 4),
  old_column2 = c(5, 6, 7, 8)
)

# 使用函数赋值多个列
DT[, c("new_column1", "new_column2") := list(sum(old_column1), mean(old_column2)), by = group]

# 打印结果
print(DT)

输出结果如下:

代码语言:txt
复制
   group old_column1 old_column2 new_column1 new_column2
1:     A           1           5           3         5.5
2:     A           2           6           3         5.5
3:     B           3           7           7         7.5
4:     B           4           8           7         7.5

在这个示例中,我们使用sum函数计算old_column1的总和,并将结果赋值给new_column1;使用mean函数计算old_column2的平均值,并将结果赋值给new_column2。最后,我们通过by = group指定按照group列进行分组计算。

腾讯云相关产品和产品介绍链接地址:

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

相关·内容

R语言基因组数据分析可能会用到的data.table函数整理

类字符矢量,用于罕见的覆盖而不是常规使用,只会使一变为更高的类型,不能降低类型; integer64 读64位的整型数; dec 小数分隔符,默认"."...fill 默认FALSE,如果TRUE,不等长的区域可以自动填上,利于文件顺利读入; blank.lines.skip 默认FALSE,如果TRUE,跳过空白行 key 设置key,用一个多个列名...对象; id.vars id变量组成的矢量,可以对应列号,也可以对应列名;缺失的话,非测量变量会被赋值; measure.vars 测量变量组成的是矢量或者列表,可以对应列号和列名...,也支持pattern函数,下面会提到,如果缺失,非id变量会被赋值;如果measure.vars和id.vars都没有赋予,全部非数字会作为id.vars,剩余作为measure.vars;如果measure...自动设为TRUE,这个时候至少要有一个对象的一要存在行名; idcol 产生一个index,默认(NULL)不产生,如果idcol=TRUE,行名自动为.id,当然你也可以直接命名,比如idcol

3.4K10

R语言 数据框、矩阵、列表的创建、修改、导出

data.frame生成指定数据框的列名及的内容,代码所示,此时列名不需添加"",df1为变量名,格式为列名=的向量*matrix矩阵与向量一样只允许同一种数据类型,否则会被转换,可以理解为二维的向量.../则为上一级)#文件是由生成它的函数决定的,不是由后缀决定的,save为csv实际上还是一个Rdata#readr包可以实现base包中的类似功能library(data.table)#其中的fread...函数可以避免此前的错误a<-fread("soft.txt",data.table = F)class(a)#但其不会有行名,且其会有一个data.table的数据结构多出来,可以设置data.table...","b","c") #加列名或行名均可以此实现#取子集方法同数据框t(m) #转置行与,数据框转置后为矩阵as.data.frame(m) #将矩阵转换为数据框列表列表内有多个数据框或矩阵,可通过list...函数将其组成一个列表l <- list(m1 = matrix(1:9, nrow = 3),m2 = matrix(2:9, nrow = 2));ll[[2]] #两个中括号提出第二个组成成分,而

7.8K00
  • data.table包使用应该注意的一些细节

    rowname   as.matrix作用于data.table时会调用as.matrix.data.table,有一个rownames参数可以指定保留为行名的 矩阵转换成data.table时可以保留列名...  在as.data.table函数中同样有一个rownames参数,设置为T可以将行名保留下来作为data.table的一 不建议set和for循环一起使用   虽然set可以在内存上直接改变数值...,但在R中用for循环比批量运算慢的多,因此首选:=或者apply等 在处理浮点数时会有一些准确性的问题   比如用seq函数numeric类型的数值时,会存在不准确的问题,比如seq(0,1,by=...  类似于集合运算,data.table中fintersect, fsetdiff, funion,fsetequal函数能对不同数据框的行求交集,差集,并集等 可以直接对按分隔符进行分割   应用...tstrsplit函数可以将一按照分隔符分成多函数返回的是一个列表,举例:DT[, c("c1", "c2") := tstrsplit(x, "/", fixed=TRUE)][],将x按照/

    1.5K10

    R语言学习笔记之——数据处理神器data.table

    data.table索引 索引与数据框相比操作体验差异比较大,data.table索引摒弃了data.frame时代的向量化参数,而使用list参数进行列索引。...(carrier,tailnum)] #但心里要清楚索引接受的条件是含有列表列表,而且这里的列表作为变量给出,而非data.frame时代的字符串向量。 行列同时索引毫无压力。...索引的位置不仅支持列名索引,可以直接支持内建函数操作。 mydata[,.(flight/1000,carrier,tailnum)] 支持直接在索引位置新建赋值符号为:=。...注意以上新建时,如果只有一,列名比较自由,写成字符串或者变量都可以,但是新建多,必须严格按照左侧列名为字符串向量,右侧为列表的模式,当然你也可以使用第二种写法。...本篇仅对data.table的基础常用函数一个整理,如果想要学习期更为灵活高阶的用法,还请异步官方文档。 左手用R右手Python系列——数据塑型与长宽转换

    3.6K80

    R语言数据分析利器data.table包 —— 数据框结构处理精讲

    一个R对象转化为data.table,R可以时矢量,列表,data.frame等,keep.rownames决定是否保留行名或者列表名,默认FALSE,如果TRUE,将行名存在"rn"行中,keep.rownames...R对象转化为data.table,比as.data.table快,因为以传地址的方式直接修改原对象,没有拷贝 copy(x) 深度拷贝一个data.table,x即data.table对象。...,只会使一变为更高的类型,不能降低类型; integer64,读64位的整型数; dec,小数分隔符,默认"."...的结尾空白符; fill,默认FALSE,如果TRUE,不等长的区域可以自动填上,利于文件顺利读入; blank.lines.skip,默认FALSE,如果TRUE,跳过空白行 key,设置key,用一个多个列名...(a = .(), b = .())] 输出一个a、b的数据框,.()就是要输入的a、b的内容,还可以将一系列处理放入大括号,{tmp <- mean(y);.

    5.9K20

    能不能让R按行处理数据?

    首先,假设我有一个这样的数据集(暂且命名为t1): ? 现在我想做的是对于每一行,找出非NA的值,填充到“mean.scale”这个新的变量;如果有多个非NA,那么就计算其平均值。...(fund_name)] 其中的关键在于拼接函数c(),它将不同的向量拼接成了一。另外,这个操作是不是有点熟悉?...对,这个步骤和cast和melt函数的作用类似,只不过这里直接用了data.table自己的语句。...事实上,data.table也整合了reshape中的cast和melt函数,并且将cast函数升级为dcast,感兴趣的小伙伴可以去研究一番。 在拉直数据后,接下来要做的工作就很简单了。...本 期总结 本期大猫带领大家学习了如何在R中按照行进行处理。R的数据处理哲学是向量,是,但这并不妨碍我们按照行进行处理,其中的关键,就在于运用 c() 函数把不同的向量拼接成一个向量。

    1.4K20

    Jelys Note之生信入门class5

    +函数名称 【R语言有基础包,base包】 (2)---找R包介绍页面(直接搜) 网页搜:limma package 【一般不需要】 (3)---列出一个包都有哪些函数 ls:列出当前环境的所有变量...>ls("package:stringr")前提:要先把R包加载成功,才能用ls列出来 列出一个包都有哪些函数或数据 3.R语言里的符号 ()--函数赋值和输出、先运行 []---向量、数据框...、矩阵取子集 [[]]---列表取子集 $ 数据框取列表取子集 <- 赋值 = 赋值,连接形式参数与实际参数 == 判断是否相等 !...逻辑值的否定 {} 多行代码 ::包::函数 4.认清函数和数据 · 只有数据才能被取子集![] · 两个中括号前取子集一般是从列表中提取!...用于读取/导出文件的R包 fread()实现智能读取【data.table】 export()导出【rio】 import_list---多个工作部的数据,引入

    90610

    文件的读写20230204

    因此不能x=load("example.Rdata"),变量不能被赋值给其他变量。...包:fread()1) 非常方便,可以准确读取一些“问题文件”,例如刚刚有缺失空的soft.txt,最好带上参数 data.table=F,可以确保产生干净的数据框。...图片图片接下来就可以使用import()函数!!...图片图片⚠️⚠️发现原本的分隔符确实可以原原本本的展现,由此可得format的参数可以为“,”(逗号),“|”(管道符),“;”(分号),“\t”(制表符)2) import_list() 可以读取一个带有多个工作簿的表格文件...>aa$sheet1 #可以通过$sheet读取这个表格文件的不同工作簿3)export() 可以把一个多个数据框组成的列表输出为带有多个工作簿的表格文件

    1.5K111

    5个例子比较Python Pandas 和R data.table

    data.table) melb <- fread("datasets/melb_data.csv") 示例1 第一个示例是关于基于数据集中的现有创建新。...另一方面,data.table仅使用列名就足够了。 示例3 在数据分析中使用的一个非常常见的函数是groupby函数。它允许基于一些数值度量比较分类变量中的不同值。...这两个库都允许在一个操作中应用多个聚合。我们还可以按升序或降序对结果进行排序。...data.table中使用减号获得降序结果。 示例5 在最后一个示例中,我们将看到如何更改列名。例如,我们可以更改类型和距离的名称。...类型:HouseType 距离:DistanceCBD 数据集中的distance列表示到中央商务区(CBD)的距离,因此最好在列名中提供该信息。

    3.1K30

    单细胞测序—不同格式的单细胞测序数据读写(多样本)

    ,将每个样本的原始数据文件加载到R中,然后创建一个Seurat对象,最后将所有Seurat对象存储在一个列表 (sceList) 中。...else { ct = tmp }:如果 tmp的长度不是2,那么直接将 tmp赋值给 ct。在这种情况下,ct 包含的是单层数据,基因表达矩阵。...Seurat对象可以包含多个数据层( counts、data、scale.data),不同的数据层表示数据在不同处理阶段的信息。...在 Seurat 中,一个 Seurat 对象通常包含多个数据层(layers),:counts: 原始的未处理的基因表达计数。data: 经过标准化的表达数据。...JoinLayers 是 Seurat 中的一个辅助函数,用来确保 Seurat 对象中所有数据层( counts、data、scale.data)包含相同的基因和细胞。

    41910

    手把手教你用R语言读取CSV文件

    如前面所述,第一个参数是文件名(或字符型变量)。注意我们如何显式地使用参数名file、head和sep。函数的参数能够按位置顺序赋值,而不用显式指定参数名,但指定参数名是最佳实践。...01 read_delim函数 readr包提供读取文本文件的一系列函数。最常用的是read_delim函数,读取有分隔符的文件,比如CSV文件。该函数的第一个参数是读取的文件路径或者URL。...02 fread函数一个读取大量数据的函数data.table包的fread函数。第一个参数是读取的文件路径或者URL。header参数表示文件的第一行是列名,sep指定分隔符。...该函数读取速度比read.table函数快,结果为data.table对象。data.table对象是data.frame的扩展,其是data.frame的优化。...在数据管理、多层次模型、机器学习、广义线性模型、可视化、数据管理和统计计算等多个领域拥有丰富经验。 本文摘编自《R语言:实用数据分析和可视化技术》(原书第2版),经出版方授权发布。

    22.1K21

    Learn R 函数和R包

    ,参数是一个数值型向量,输出结果是该向量的平均值加2倍的标准差,并写出用户使用该函数的代码 。...") #ls是展示出该包中的函数 R语言中的函数 ()前的是函数 [] 是取子集,一定是个数据 【】里有“,”->向量或矩阵 [[]] 前的通常是个列表 列表取子集 $ 数据框取子集 <-...赋值 = 赋值,或连接形式参数与实际参数 == 判断是否相等 !...x=load("xxx.Rdata") Rdata本身含有变量的不需要再进行赋值 #在当前文件夹(data自己建立的文件夹)下用“/”打开 >read.csv("data/ex1.txt")...read.table()智能版 >a=data.table::fread("soft.txt",data.table = F)#读取很智能,不会导致窜 #### 4.rio包 可以读取任何形式,但有问题的文件仍有问题

    1.4K00

    R语言高级数据结构data.table

    今天给大家介绍一个升级版的data.frame,其不仅可以存储不同数据类型还可以进行多的并行运算。包的安装我们就不再赘述了(install.packages(“data.table”))。...首先看下此格式数据的生成: fread 自带的读入数据的函数,可以直接将txt,csv读入并生成相应的data.table格式数据。...as.data.table 将R对象转化为data.table格式的数据,其对象可以为列表,向量,data.frame。...3. data.table中数据函数的调用以及并行运算的加入: DT[,sum(y)] DT[,.(sum(y),sum(v))] ? 4. 自定义函数的执行,需要用{}包裹所有的命令。...各分组的计数函数.N,例: DT[,.N,by=x] 7. 其中数据各的增加,删除,修改,用到的函数是:=。 DT[,y1:=y] DT[,y:=NULL] DT[,y:=(y+1)] ?

    2.1K30

    从零开始的异世界生信学习 R语言部分 04 文件的读写与认知

    save(ex1,file = "xerror.csv") #save文件用来保存Rdata 文件 a <- read.csv("xerror.csv") load("xerror.csv") 图片 将一个项目的不同结果数据存在不同的文件夹...图片 将一个项目的不同部分分别存在不同的文件夹 图片 图片 图片 # data.table包中的fread函数 soft = data.table::fread("soft.txt",data.table...") #读取xlsx文件 wf <- import_list("wf.xlsx") #可以吧多个sheet文件的excel文件导入成列表模式 a = import("abc.mp4",format =...") #导出后也为多列表的xlsx文件 export(b$Sheet1,"jimmyzhenbang.csv") #可以将列表中的一部分就可以导出csv文件 图片 补充知识 矩阵如何生成 # 1.由数值型数据框转换...由向量拼接而来 m3 = cbind(1:10, # cbind函数表示按照行合并向量,rbind为按照合并数据 11:20, 30:21) m3 #4.

    1.3K40

    「r」dplyr 里的 join 与 base 里的 merge 存在差异

    构造数据集 下面是一个可重复的例子,构造两个数据集,一个是基于 data.frame 的列表,另一个是就要 data.table列表: x <- list( a = data.frame(r1...所以使用 dplyr 提供的连接函数报错是正常的,但有意思的是,基础包提供的 merge() 函数可以完成连接操作,真是优秀(感兴趣的朋友可以看下测试下 merge 函数源代码)!...本质上是 data.table 体格的泛型函数不支持类似基础包中的操作。 如何编写代码支持对上述数据集的连接操作?...检查 be_join 第一个子集的与 to_join 存在共同 等待循环结束 我们可以查看结果: to_join[, c("r1", "r2", "r3", "r4", "r5")] #> r1...下面更新了一个用于合并的函数: reduceG <- function(G) { # Reduce elements of G if at least two elements # contain

    1.6K30

    R语言:data.table语句批量生成变量

    我们在对多标准进行筛选时,在之前我们还进行了一步非常重要的提取,也就是将每一观察值提取出某一特定的字段,而后生成一系列变量,这些变量的观测值只可能存在三种情况:醛固酮、继发性醛固酮或者NA。...经过这样的处理我们才能进行上一期公众号所讲述的下一步:以多标准进行筛选的操作。...代码如下: lapply(.SD[, 2:23], str_match, "继发性醛固酮|醛固酮") := 左边 我们可以再回顾一下,上文链接中用data.table语句批量处理变量的推送中所提到的 ‘...:=’ 左边格式的问题: ':=' 左边的格式应该是一个向量,一个带有需要被处理变量的字符格式的向量,这一点从colnames这个函数的使用可以得知。...那么对于一个字符格式向量的处理,最好的选择就是stringr这个包,在这里我们为需要提取一部分字段的变量,运用str_c这个函数,对每一个变量名加入了后缀_xtrct,从而生成一系列新的变量名,也即是我们上文中生成的那个数据集

    1.2K20

    Matt Dowle 演讲节选(二)

    换句话说,哪怕在 global environment 中存在一个叫做 B 的变量,那么data.talbe在运行的时候也会“认” DF 中的那个叫做 B 的,而不是 global environment...这里的关键在于,在第一种方法中,每为新的一行赋值data.table就要重新复制一遍DT,也就是说,第一种方法的运行过程中,DF被复制了1000遍!...一个更极端的例子是,加入你在 4G 内存中 装下了一个 3G 的数据集,这时你想要删去其中的一都是不可能的,因为在data.frame中,哪怕删除操作都会导致数据集的复制!...这个用户一开始使用lapply和do.call函数,不仅计算时间很长(30 min!),而且代码特别难看: ? 而使用data.table,则简直是一阵春风: ?...2014:data.table的现在 fread函数 在演讲的最后(演讲在2014年),Matt 提到了当时他正在给data.table添加的新功能:fast read,也即fread函数

    1.1K40

    R语言基础4(文件读写)

    分隔符逗号,空格,制表符(\t)Rdata——R语言的数据保存格式保存的是R语言的变量,不是表格文件,支持多个变量保存在同一个Rdatasave(test,file="example.Rdata")load...csv")ex2 <- read.csv("ex2.csv",row.names = 1,check.names = F)## check.names检查列名是否有特殊字符;##row.names第一作为行名...save(soft,file = "soft.Rdata")rm(list = ls())load(file = "soft.Rdata")文件的本质是由生成他的函数决定的,不是后缀决定的。...用于读取导出文件的R包图片示例#data.tableinstall.packages("data.table")library(data.table)soft = data.table::fread("..."soft.txt")#读取多工作簿的excells2 = rio::import_list("ls.xlsx")#导出为普通表格文件export(iris,file = "iris.csv")#导出列表

    25220

    Day05 生信马拉松-文件的读写

    ",会导致所在数据格式变化正确使用:read.table("ex1.txt",header = T) 发现问题要从函数的帮助文档里找参数解决1.3 .csv文件的读取常见错误:read.csv("ex2....csv"),直接使用read.csv()函数会出现以下错误①列名分隔符"-"被改为"."②第1默认被添加列名"x"图片正确使用:read.csv("ex2.csv",row.names = 1,check.names...为工作目录下的子文件夹名,不要漏了“/”拓展内容在工作目录内创建一个文件夹dir.create("文件夹名")1.5 读取上一级文件load(.....用于文件的读取/导出的packages图片3.1 data.table:soft = data.table::fread("soft.txt",data.table = F)每次要默认标注“data.table...读取多工作簿的excells2 = rio::import_list("ls.xlsx")#导出为普通表格文件 导出的文件类型取决于后缀名export(iris,file = "iris.csv")#导出列表

    20520
    领券