Questions tagged «data.table»

R data.table包是data.frame的扩展,用于快速内存数据分析。将dt标记用于带有Shiny(DT)的DataTables包。

3
data.table vs dplyr:一个人可以做得很好,另一个人不能做得不好吗?
总览 我相对熟悉data.table,而不是那么熟悉dplyr。我已经阅读了一些出现在SO上的dplyr插图和示例,到目前为止,我的结论是: data.table且dplyr速度可比,除非有很多(即> 10-100K)组,并且在某些其他情况下(请参见下面的基准) dplyr 具有更多可访问的语法 dplyr 抽象(或将)潜在的数据库交互 功能上有一些细微的差异(请参见下面的“示例/用法”) 我认为2.不太重要,因为我相当熟悉它data.table,尽管我知道这对新手和老手来说都是一个很大的因素。我想避免争论哪个更直观,因为从我已经熟悉的人的角度来看,这与我提出的具体问题无关data.table。我还想避免讨论“更直观”如何导致更快的分析(当然是正确的,但又不是我对此最感兴趣的内容)。 题 我想知道的是: 对于熟悉软件包的人来说,是否有分析任务更容易用一个或另一个软件包编写代码(即,要求的击键与要求的深奥程度的某种组合,每个击键都是一件好事)。 在一个程序包中,是否有比其他程序更有效地执行分析任务(即大于2倍)? 最近的一个SO问题使我对这个问题进行了更多的思考,因为到那时为止,我认为dplyr提供的功能超出了我已经可以做得到的范围data.table。这是dplyr解决方案(Q末的数据): dat %.% group_by(name, job) %.% filter(job != "Boss" | year == min(year)) %.% mutate(cumu_job2 = cumsum(job2)) 这比我尝试破解data.table解决方案要好得多。也就是说,好的data.table解决方案也相当不错(感谢Jean-Robert,Arun,并请注意,在这里,我赞成使用单一语句而不是严格的最佳解决方案): setDT(dat)[, .SD[job != "Boss" | year == min(year)][, cumjob := cumsum(job2)], by=list(id, job) ] 后者的语法可能看起来很深奥,但是如果您习惯了data.table(例如,不使用一些更深奥的技巧),它实际上非常简单。 理想情况下,我希望看到的是一些很好的示例,它们的方式dplyr或data.table方法实质上更简洁,或性能更好。 例子 用法 …
758 r  data.table  dplyr 

8
如何在data.table中按名称删除列?
要摆脱a中名为“ foo”的列data.frame,我可以这样做: df <- df[-grep('foo', colnames(df))] 但是,一旦df转换为data.table对象,便无法删除列。 例: df <- data.frame(id = 1:100, foo = rnorm(100)) df2 <- df[-grep('foo', colnames(df))] # works df3 <- data.table(df) df3[-grep('foo', colnames(df3))] 但是一旦将其转换为data.table对象,它将不再起作用。
194 r  data.table 

2
准确了解data.table是何时引用另一个data.table(相对于另一个data.table的副本)
我在理解的传递引用属性时遇到了一些麻烦data.table。有些操作似乎“破坏”了参考,我想确切地了解正在发生的事情。 在创建data.table另一个表data.table(通过<-,然后通过来更新新表时:=,原始表也将被更改。这是预期的,具体如下: ?data.table::copy 和stackoverflow:通过操作员在数据表包中的引用传递 这是一个例子: library(data.table) DT <- data.table(a=c(1,2), b=c(11,12)) print(DT) # a b # [1,] 1 11 # [2,] 2 12 newDT <- DT # reference, not copy newDT[1, a := 100] # modify new DT print(DT) # DT is modified too. # a b # [1,] 100 11 …

3
.SD在R中的data.table中代表什么
.SD看起来很有用,但我真的不知道自己在做什么。它代表什么?为什么会有前期(句号)。使用时会发生什么? 我读到: .SD是一个data.table包含x每个组数据的子集,但不包括组列。在按i分组时,在按by,键by和_ad hoc_ 分组时可以使用它by 这是否意味着女儿data.tables被保存在存储器中以进行下一个操作?
172 r  data.table 

4
为什么2012年Pandas在python中的合并速度比data.table在R中的合并速度快?
最近,我遇到了python 的pandas库,根据该基准,该库执行非常快的内存中合并。它甚至比R(我选择分析的语言)中的data.table包还要快。 为什么pandas要比这快得多data.table?是因为python相对于R具有固有的速度优势,还是我不了解一些折衷方案?有没有一种方法可以执行内部和外部联接data.table而无需使用merge(X, Y, all=FALSE)and merge(X, Y, all=TRUE)? 这是用于对各种软件包进行基准测试的R代码和Python代码。
160 python  r  join  data.table  pandas 

8
每组汇总/汇总多个变量(例如,总和,均值)
从数据帧,是否有聚集(一个简单的方法sum,mean,max同时等c)中多个变量? 以下是一些示例数据: library(lubridate) days = 365*2 date = seq(as.Date("2000-01-01"), length = days, by = "day") year = year(date) month = month(date) x1 = cumsum(rnorm(days, 0.05)) x2 = cumsum(rnorm(days, 0.05)) df1 = data.frame(date, year, month, x1, x2) 我想同时按年份和月份汇总数据框中的x1和x2变量df2。以下代码汇总了x1变量,但是也可以同时汇总x2变量吗? ### aggregate variables by year month df2=aggregate(x1 ~ year+month, data=df1, sum, na.rm=TRUE) head(df2) …

6
如何通过引用删除data.table中的行?
我的问题与通过引用进行分配而不是在中进行复制有关data.table。我想知道是否可以通过引用删除行,类似于 DT[ , someCol := NULL] 我想知道 DT[someRow := NULL, ] 我猜这是为什么没有此功能的充分原因,因此也许您可以指出一个替代常规复制方法的好方法,如下所示。特别要注意的是,我喜欢example(data.table)中的内容, DT = data.table(x = rep(c("a", "b", "c"), each = 3), y = c(1, 3, 6), v = 1:9) # x y v # [1,] a 1 1 # [2,] a 3 2 # [3,] a 6 3 # …
150 r  data.table 

10
在大数据表中替换NA的最快方法
我有一个很大的data.table,许多缺失值分散在整个〜200k行和200列中。我想将那些NA值尽可能有效地重新编码为零。 我看到两个选项: 1:转换为data.frame,并使用类似以下内容 2:某种很酷的data.table子设置命令 我将对类型1的高效解决方案感到满意,将其转换为data.frame然后再转换为data.table不会花费太长时间。


17
用最新的非NA值替换NA
在data.frame(或data.table)中,我想用最接近的先前非NA值“填充” NA。data.frame以下是使用向量(而不是)的简单示例: > y <- c(NA, 2, 2, NA, NA, 3, NA, 4, NA, NA) 我想要一个fill.NAs()允许我构造的函数yy: > yy [1] NA NA NA 2 2 2 2 3 3 3 4 4 我需要对许多(总计〜1 Tb)小型data.frames(〜30-50 Mb)重复此操作,其中所有条目都是NA。解决这个问题的好方法是什么? 我煮的丑陋的解决方案使用此功能: last <- function (x){ x[length(x)] } fill.NAs <- function(isNA){ if (isNA[1] == 1) { isNA[1:max({which(isNA==0)[1]-1},1)] …
141 r  data.table  zoo  r-faq 

2
为什么rbindlist比rbind“更好”?
我正在浏览文档,data.table并从这里的一些对话中也注意到了rbindlist可能比更好rbind。 我想知道为什么是rbindlist优于rbind以及其中场景rbindlist的确有过人之处过rbind? 在内存利用率方面有什么优势吗?
135 r  data.table  rbind  rbindlist 

2
按组在data.table中使用:=分配多列
使用分配给多列的最佳方法是什么data.table?例如: f <- function(x) {c("hi", "hello")} x <- data.table(id = 1:10) 我想做这样的事情(当然这个语法是不正确的): x[ , (col1, col2) := f(), by = "id"] 为了扩展这一点,我可能有很多列,它们的名称存储在变量中(例如col_names),我想这样做: x[ , col_names := another_f(), by = "id", with = FALSE] 做这样的事情的正确方法是什么?

3
按字符串键order(-x,v)的降序对data.table中的行进行排序在data.table 1.9.4或更早版本上给出错误
比方说,我有以下data.table的R: library(data.table) DT = data.table(x=rep(c("b","a","c"),each=3), y=c(1,3,6), v=1:9) 我想按两列(例如x和v)进行排序。我用这个: DT[order(x,v)] # sorts first by x then by v (both in ascending order) 但是现在,我想按x(降序)对其进行排序,并具有以下代码: DT[order(-x)] #Error in -x : invalid argument to unary operator 因此,我认为此错误是由于事实class(DT$x)=character。为了解决这个问题,您能给我什么建议吗? 我知道我可以使用DT[order(x,decreasing=TRUE)],但是我想知道语法同时使用两种方式(有些减少,有些增加)按几列排序。 请注意,如果使用DT[order(-y,v)]结果还可以,但是如果使用DT[order(-x,v)],则会出现错误。所以,我的问题是:如何解决这个错误?
125 r  string  sorting  data.table  key 

3
为什么data.tables的X [Y]联接不允许完全外部联接或左联接?
这是关于data.table连接语法的一个哲学问题。我发现data.tables有越来越多的用途,但仍在学习... X[Y]data.tables的联接格式非常简洁,方便且有效,但是据我所知,它仅支持内部联接和正确的外部联接。要获得左侧或完全外部联接,我需要使用merge: X[Y, nomatch = NA] -Y中的所有行-右外部联接(默认) X[Y, nomatch = 0] -仅X和Y都匹配的行-内部联接 merge(X, Y, all = TRUE) -X和Y的所有行-完全外部联接 merge(X, Y, all.x = TRUE) -X中的所有行-左外部联接 在我看来,如果X[Y]连接格式支持所有4种连接类型,那将很方便。是否仅支持两种类型的联接? 对我来说,nomatch = 0和nomatch = NA参数值对于正在执行的动作不是很直观。这是我更容易理解和记忆的merge语法:all = TRUE,all.x = TRUE和all.y = TRUE。由于X[Y]操作merge远不止于match,为什么不对merge联接使用语法而不是match函数的nomatch参数? 以下是4种联接类型的代码示例: # sample X and Y data.tables library(data.table) X <- data.table(t = 1:4, a …
123 r  join  data.table 

2
如何对data.table列进行重新排序(不进行复制)
data.table x给定列名的字符向量,我想对我的列重新排序neworder: library(data.table) x <- data.table(a = 1:3, b = 3:1, c = runif(3)) neworder <- c("c", "b", "a") 显然我可以做到: x[ , neworder, with = FALSE] # or x[ , ..neworder] # c b a # 1: 0.8476623 3 1 # 2: 0.4787768 2 2 # 3: 0.3570803 1 3 …
118 r  data.table 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.