Ada*_*NYC 69 r dataframe data.table
我刚开始使用R,并遇到了data.table.我发现它很棒.
一个非常天真的问题:我可以忽略data.frame来使用data.table来避免两个包之间的语法混淆吗?
Ama*_*nda 61
作为FAQ 1.1的亮点,
j在[.data.table从根本不同j的[.data.frame.甚至像DF[,1]在许多包和用户代码中破坏现有代码一样简单 .这是设计使然,我们希望它以这种方式工作,以使更复杂的语法工作.还有其他差异(参见FAQ 2.17).此外,
data.table继承自data.frame.它也是一个data.frame.Adata.table可以传递给任何只接受的包,data.frame并且包可以使用[.data.frame语法data.table.我们也在可能的情况下提出了R的增强功能.其中一个被接受为R 2.12.0中的新功能:
unique()并且match()现在在字符向量上更快,其中所有元素都在全局CHARSXP高速缓存中并且具有未标记的编码(ASCII).感谢Matthew Dowle建议改进在unique.c中生成哈希码的方式.第二个提议是使用
memcpyinduplicate.c,这比C中的for循环要快得多.这将改进R在内部复制数据的方式(在某些度量上复制13次).r-devel上的帖子在这里:http://tolstoy.newcastle.edu.au/R/e10/devel/10/04/0148.html.
data.frame指的是第3行,但是DT[3]指的是第3列DF[3]但DT[3, ] == DT[3](有点令人困惑)- 出于这个原因,我们说逗号在DT中是可选的,但在DF中不是可选的
DF[ , 3] == DF[3]DT其中i是单个整数,返回单行,就像DF,但不像返回向量的矩阵单行子集.DT[[3]] == DF[, 3] == DF[[3]]其中j是单个整数,返回一列data.table,与之不同DT[i, ],默认情况下返回一个向量i.DF[i, ]DT[ , j]j返回1行NA,但DF[, j]返回包含NA的DF副本.- 该符号
DT[ , "colA"][[1]] == DF[ , "colA"]在R中是逻辑类型,因此被回收DT[ , colA] == DF[ , "colA"].意图可能是DT[ , list(colA)] == DF[ , "colA", drop = FALSE].DT[NA]这样做是为了方便起见.NA将NA视为FALSE,但 为每个DF[NA]返回NA行DFNA比...更简单NAlogical创建3列,[.data.frame创建一个列表列.DF[NA_integer_]默认情况下[.data.table在DT[c(TRUE, NA, FALSE)],但NA在FALSE,为了方便.DF[c(TRUE, NA, FALSE)]为了提高效率,默认情况下为TRUE,NA但为FALSENA.- 由于全局字符串缓存已添加到R,因此字符项是指向单个缓存字符串的指针,并且不再具有转换为因子的性能优势.
- 列表列中的原子向量在data.frame中使用","打印时折叠,但在data.table中使用",",在第6项之后使用尾随逗号,以避免意外打印大型嵌入对象.
- 在
DT[ColA == ColB]我们经常设定DF[!is.na(ColA) & !is.na(ColB) & ColA == ColB, ].当我们忘记时,在选择单列并且突然返回向量而不是单个列data.frame的边缘情况下会出现错误.在data.frame(list(1:2, "k", 1:4))我们抓住机会使其保持一致和下降.- 当data.table传递给data.table-unaware包时,该包不关心任何这些差异; 它只是工作
可能存在这样的情况:某些软件包使用的代码在给定data.frame时会丢失,但是,考虑list到为了避免此类问题而不断维护,可能会出现的任何问题都会立即得到解决.
例如
来自NEW 1.8 for v 1.8.2
- base :: unname(DT)现在可以再次使用,plyr :: melt()需要它.感谢Christoph Jaeckel的报道.测试补充.
- 为ITime添加了一个as.data.frame方法,因此ITime可以无错误地传递给ggplot2,#1713.感谢Farrel Buchinsky的报道.测试补充说.ITime轴标签仍显示为午夜的整数秒; 我们不知道为什么ggplot2不会调用ITime的as.character方法.将ITime转换为POSIXct for ggplot2,是一种方法.