Tag: data.table

dplyr data.table,我真的使用data.table吗?

如果我在数据表顶部使用dplyr语法,是否仍然使用dplyr的语法获得数据表的所有速度优势? 换句话说,如果我用dplyr语法来查询数据表,是否会误用数据表? 还是我需要使用纯数据表语法来利用其所有的权力。 预先感谢您的任何build议。 代码示例: library(data.table) library(dplyr) diamondsDT <- data.table(ggplot2::diamonds) setkey(diamondsDT, cut) diamondsDT %>% filter(cut != "Fair") %>% group_by(cut) %>% summarize(AvgPrice = mean(price), MedianPrice = as.numeric(median(price)), Count = n()) %>% arrange(desc(Count)) 结果: # cut AvgPrice MedianPrice Count # 1 Ideal 3457.542 1810.0 21551 # 2 Premium 4584.258 3185.0 13791 # 3 Very Good 3981.760 2648.0 […]

在一个函数调用中将多个列添加到R data.table?

我有一个函数返回列表中的两个值。 这两个值都需要添加到一个data.table两列中。 function的评估是昂贵的,所以我想避免不得不两次计算function。 这是一个例子: library(data.table) example(data.table) DT xyv 1: a 1 42 2: a 3 42 3: a 6 42 4: b 1 4 5: b 3 5 6: b 6 6 7: c 1 7 8: c 3 8 9: c 6 9 这是我的function的一个例子。 请记住,我说这是昂贵的计算,最重要的是无法从其他给定值中推导出一个返回值(如下例所示): myfun <- function (y, v) { ret1 = y […]

在data.table中转换列类

我有一个问题,使用data.table:如何转换列类? 这里是一个简单的例子:用data.frame我没有问题转换它,用data.table我只是不知道如何: df <- data.frame(ID=c(rep("A", 5), rep("B",5)), Quarter=c(1:5, 1:5), value=rnorm(10)) #One way: http://stackoverflow.com/questions/2851015/r-convert-data-frame-columns-from-factors-to-characters df <- data.frame(lapply(df, as.character), stringsAsFactors=FALSE) #Another way df[, "value"] <- as.numeric(df[, "value"]) library(data.table) dt <- data.table(ID=c(rep("A", 5), rep("B",5)), Quarter=c(1:5, 1:5), value=rnorm(10)) dt <- data.table(lapply(dt, as.character), stringsAsFactors=FALSE) #Error in rep("", ncol(xi)) : invalid 'times' argument #Produces error, does data.table not have the option […]

什么时候应该在data.table中使用:=运算符?

data.table对象现在有一个:=运算符。 是什么让这个运算符不同于其他赋值运算符? 另外,它的用途是什么,它有多快,什么时候应该避免?

如何重新sortingdata.table列(不复制)

我想重新排列我的data.table x列,给定一个列名称的字符向量data.table : 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] # cba # 1: 0.8476623 3 1 # 2: 0.4787768 2 2 # 3: 0.3570803 1 3 但是这需要再次复制整个数据集。 有没有另外一种方法来做到这一点?

在data.table中对行进行sorting

假设我在R有以下data.table : library(data.table) DT = data.table(x=rep(c("b","a","c"),each=3), y=c(1,3,6), v=1:9) 我想要按两列(例如列x和v )sorting。 我用这个: DT[order(x,v)] # sorts first by x then by v (both in ascending order) 但现在,我想按x (按降序)sorting,并具有以下代码: DT[order(-x)] #Error in -x : invalid argument to unary operator 因此,我认为这个错误是由于class(DT$x)=character 。 你能给我任何build议,以解决这个问题? 我知道我可以使用DT[order(x,decreasing=TRUE)] ,但是我想知道使用两种方式(一些递减,一些递增)同时排列几个语法的语法。 请注意,如果使用DT[order(-y,v)] ,结果是正确的,但是如果使用DT[order(-x,v)] ,则会出现错误。 所以,我的问题是:如何解决这个错误?

在大型data.table中取代NAs的最快方法

我有一个很大的data.table ,许多缺失的值分散在整个〜200K行和200列。 我想尽可能有效地将这些NA值重新编码为零。 我看到两个选项: 1:转换为data.frame,并使用这样的东西 2:一些很酷的data.table子设置命令 我会很满意types1的一个相当有效的解决scheme。转换为data.frame,然后返回到data.table不会太长。

为什么data.tables的X 连接不允许完整的外连接或左连接?

这是关于data.table连接语法的一个哲学问题。 我发现data.tables越来越多的用途,但仍然在学习… data.tables的连接格式X[Y]非常简洁,方便和高效,但据我所知,它只支持内连接和右外连接。 要获得一个左或全外连接,我需要使用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种types的连接,这将是方便的。 是否有一个原因只支持两种types的连接? 对于我来说, nomatch = 0和nomatch = NA参数值对于正在执行的操作并不是很直观。 对我来说,理解和记住merge语法更为容易: all = TRUE , all.x = TRUE […]

为什么rbindlist比rbind“更好”?

我正在通过data.table文档,也注意到从这里的一些对话, rbindlist应该比rbind更好。 我想知道为什么rbindlist比rbind更好,在哪种情况下rbindlist真的超越rbind ? 在内存使用方面有没有优势?

R在data.table中代表什么?

.SD看起来很有用,但我真的不知道我在做什么。 它代表什么? 为什么有一个前期(句号)。 当我使用它时发生了什么? 我读到: .SD是一个data.table其中包含每个组的x数据的子集,不包括组列。 它可以用于分组时, i分组时,键入和_ad hoc_ by 这是否意味着女儿的data.table被保存在内存中以便下一次操作?