什么是正确的方法来更改data.table中的factor列的data.table (注意:不是数据框) library(data.table) mydt <- data.table(id=1:6, value=as.factor(c("A", "A", "B", "B", "B", "C")), key="id") mydt[, levels(value)] [1] "A" "B" "C" 我正在寻找像这样的东西: mydt[, levels(value) <- c("X", "Y", "Z")] 但是,当然,上述行不起作用。 # Actual # Expected result > mydt > mydt id value id value 1: 1 A 1: 1 X 2: 2 A 2: 2 X 3: 3 B […]
当使用data.table有可能返回除了一个的所有列,如在data.frame ? 如果答案是否定的,有没有人有一个优雅的方式来将多个时间序列data.table转换为zoo或其他时间序列对象? 考虑下面的例子: library(data.table) library(zoo) ## DEFINE DATA set.seed(1) dt = data.table( mydates = as.Date("2012-01-01") + 1:9, value1 = sort(rpois(9, 6)), value2 = sort(rpois(9, 6)), value3 = sort(rpois(9, 6)), value4 = sort(rpois(9, 6)), value5 = sort(rpois(9, 6))) ## CONVERT TO DATA FRAME df = as.data.frame(dt) ## CONVERT TO ZOO zooObj = zoo(df[,-1], df$mydates) ## […]
data.table有一个很好的function,可以抑制输出到表头和尾部。 是否可以一次查看/打印100多行? library(data.table) ## Convert the ubiquitous "iris" data to a data.table dtIris = as.data.table(iris) ## Printing 100 rows is possible dtIris[1:100, ] ## Printing 101 rows is truncated dtIris[1:101, ] 我经常有data.table结果有点大(如200行),我只是想查看。
看起来knitr不明白DT[, a:=1]不应该导致文档的DT输出。 有没有办法阻止这种行为? 示例knitr文件: Data.Table Markdown ======================================================== Suppose we make a `data.table` in **R Markdown** “`{r} DT = data.table(a = rnorm(10)) “` Notice that it doesn't display the contents until we do a “`{r} DT “` style command. However, if we want to use `:=` to create another column “`{r} DT[, c:=5] “` It would […]
data.table引入了:=运算符。 为什么不过载< – ?
我有一个字符列data.table,并希望只select那些包含一个子string的行。 等同于SQL WHERE x LIKE '%substring%' 例如 > Months = data.table(Name = month.name, Number = 1:12) > Months["mb" %in% Name] Empty data.table (0 rows) of 2 cols: Name,Number 我将如何select名称包含“MB”的行?
我想了解更多有关滚动连接工作的方式,并且有一些困惑,我希望有人能够为我澄清这一点。 举一个具体的例子: dt1 <- data.table(id=rep(1:5, 10), t=1:50, val1=1:50, key="id,t") dt2 <- data.table(id=rep(1:5, 2), t=1:10, val2=1:10, key="id,t") 我期望这将产生一个长的data.table在dt2的价值滚动: dt1[dt2,roll=TRUE] 相反,正确的做法似乎是这样的: dt2[dt1,roll=TRUE] 有人可以向我解释更多关于如何joindata.table作品,因为我显然不能正确理解它。 我认为dt1[dt2,roll=TRUE]对应于select * from dt1 right join dt2 on (dt1.id = dt2.id and dt1.t = dt2.t) sql的等价物,除了添加了locffunction。 另外文档说: X[Y] is a join, looking up X's rows using Y (or Y's key if it has one) […]
注意:这个问题和下面的答案引用data.table版本<1.5.3; v。1.5.3于2011年2月发布解决此问题。 查看更多最近的处理(03-2012): 将外键上的SQL连接转换为R data.table语法 我一直在挖掘data.table包的文档(replacedata.frame,这对于某些操作来说效率更高),包括Josh Reich在NYC R Meetup (pdf) 上对SQL和data.table的介绍 ,但是不能把这个完全无关的操作算出来。 > x <- DT(a=1:3, b=2:4, key='a') > x ab [1,] 1 2 [2,] 2 3 [3,] 3 4 > y <- DT(a=1:3, c=c('a','b','c'), key='a') > y ac [1,] 1 a [2,] 2 b [3,] 3 c > x[y] ab [1,] 1 2 [2,] […]
我正在使用data.table包加速数据集上的汇总统计信息收集。 我很好奇,如果有一种方法可以由多个列组成。 我的数据如下所示: purchaseAmt adShown url 15.54 00001 150000001 4.82 00002 150000001 157.99 05005 776300044 … … … 我可以做这样的事情: adShownMedian <- df1[,median(purchaseAmt),by="adShown"] 得到每个广告的中位数。 我将如何做一些结合adShown和url ? 我试过这个: adShownMedian <- df1[,median(purchaseAmt),by=c("adShown","url")] 但没有运气。 有什么build议么?
我有以下data.table set.seed(1) DT <- data.table(VAL = sample(c(1, 2, 3), 10, replace = TRUE)) VAL 1: 1 2: 2 3: 2 4: 3 5: 1 6: 3 7: 3 8: 2 9: 2 10: 1 在 VAL每个数字中,我想: 统计logging/行数 创build第一个,第二个,第三个出现的行索引(计数器)等。 最后我想要结果 VAL COUNT IDX 1: 1 3 1 2: 2 4 1 3: 2 4 2 4: […]