我试图在Shiny中呈现的DataTable中设置列的宽度,并且无法使用aoColumnDefs选项实现它.有人曾尝试过这个吗?我的表有1个文本,后跟3个数字列.数字列需要更窄,第1列(文本)更宽.
output$result <- renderDataTable({
z <- as(dataInput(), "data.frame")
setnames(z, c("Rules", "Support", "Confidence", "StatDep"))
z
}, options = list(aLengthMenu = c(5, 30, 50), iDisplayLength = 5, bSortClasses = TRUE,
aoColumnDefs = list(sWidth = "50px", aTargets = list(1))))
Run Code Online (Sandbox Code Playgroud)
谢谢,
**更新**这似乎有效,但也可能有其他选择.
output$result <- renderDataTable({
z <- as(dataInput(), "data.frame")
setnames(z, c("Rules", "Support", "Confidence", "StatDep"))
z
}, options = list(aLengthMenu = c(5, 30, 50), iDisplayLength = 5, bSortClasses = TRUE,
bAutoWidth = FALSE,
aoColumn = list(list(sWidth = "150px", sWidth = "30px",
sWidth = "30px", …Run Code Online (Sandbox Code Playgroud) 这个问题适用于创建"宽"表,类似于您可以使用reshape2中的dcast创建的表.我知道之前已经讨论了很多次,但我的问题是如何使这个过程更有效率.我在下面提供了几个例子,这些例子可能会使问题看起来很冗长,但大多数只是用于基准测试的测试代码
从一个简单的例子开始,
> z <- data.table(col1=c(1,1,2,3,4), col2=c(10,10,20,20,30),
col3=c(5,2,2.3,2.4,100), col4=c("a","a","b","c","a"))
> z
col1 col2 col3 col4
1: 1 10 5.0 a # col1 = 1, col2 = 10
2: 1 10 2.0 a # col1 = 1, col2 = 10
3: 2 20 2.3 b
4: 3 20 2.4 c
5: 4 30 100.0 a
Run Code Online (Sandbox Code Playgroud)
我们需要创建一个"宽"表,它将col4列的值作为列名,并将col1和col2的每个组合的和(col3)值组合在一起.
> ulist = unique(z$col4) # These will be the additional column names
# Create long table with sum
> z2 <- z[,list(sumcol=sum(col3)), by='col1,col2,col4']
# Pivot …Run Code Online (Sandbox Code Playgroud) 我在SO上已经阅读了一些关于类似问题的参考,但是还没有找到解决方案,并且想知道是否有任何方法只使用data.table来执行以下操作.
我将使用一个简化的示例,但在实践中,我的数据表有> 1000列,类似于var1,var2,... var1000等.
dt <- data.table(uid=c("a","b"), var1=c(1,2), var2=c(100,200))
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种解决方案,可以让我得到一个类似于reshape融化功能的输出 -
> melt(dt, id=c("uid"))
uid variable value
1 a var1 1
2 b var1 2
3 a var2 100
4 b var2 200
Run Code Online (Sandbox Code Playgroud)
也就是说,除了uid之外的所有列都列在单个列下,并且在相邻列中具有相应的值.我已经尝试过使用list等的组合,但可能会遗漏一些明显的东西.
dt中的所有uid都是唯一的.
提前致谢.
我使用foreach和.combine = rbindlist.这似乎不起作用,但如果我使用.combine = rbind它可以正常工作.
只是用一个简单的例子来说明 -
> t2 <- data.table(col1=c(1,2,3))
> foreach (i=1:3, .combine=rbind) %dopar% unique(t2)
col1
1: 1
2: 2
3: 3
4: 1
5: 2
6: 3
7: 1
8: 2
9: 3
# But using rbindlist gives an error
> foreach (i=1:3, .combine=rbindlist) %dopar% unique(t2)
error calling combine function:
<simpleError in fun(result.1, result.2): unused argument(s) (result.2)>
NULL
Run Code Online (Sandbox Code Playgroud)
有没有人能够做到这一点?
提前致谢.
我想知道使用data.table fread函数可以读取的行数是否有限制.我正在使用一个包含40亿行,4列,大约40 GB的表.似乎fread只会读取前~840万行.它没有给出任何错误,但返回到R提示符,好像它已经读取了所有数据!
我知道fread目前不是为了"prod use",而是想知道是否有任何执行prod-release的时间表.
我使用data.table的原因是,对于这种大小的文件,与在data.frame等中加载文件相比,它在处理数据方面非常有效.
目前,我正在尝试其他两种选择 -
1)使用扫描并传递给data.table
data.table(matrix(scan("file.csv",what="integer",sep=","),ncol=4))
Resulted in --
Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :
too many items
Run Code Online (Sandbox Code Playgroud)
2)将文件分成多个单独的段,限制大约为.使用Unix的5亿行拆分并按顺序读取它们然后按顺序循环到文件中 - 有点麻烦,但似乎是唯一可行的解决方案.
我认为可能有一种Rcpp方法可以更快地完成这项工作,但我不确定它是如何实现的.
提前致谢.
有没有办法在生成带有longtable选项的xtable时重复顶行/设置标题?
例如,如果我有
tableSb <- xtable(df, caption="A Very Long Table", label="ALongTable")
print(tableSb, include.rownames=TRUE, tabular.environment="longtable", floating=FALSE)
Run Code Online (Sandbox Code Playgroud)
这样可以正常工作,但是当表格滚动到新页面时,标题不会重复.有什么建议 ?
当数据不适合内存时,网上有很多关于在Unix上对大文件进行排序的讨论.通常使用mergesort和variants.
Hoewever,如果假设有足够的内存来容纳整个数据,那么最有效/最快的排序方式是什么?csv文件大约为50 GB(> 10亿行),并且有足够的内存(数据大小的5倍)来保存整个数据.
我可以使用Unix排序,但仍然需要> 1小时.我可以使用任何必要的语言,但我主要寻找的是速度.我知道我们可以将数据加载到一个柱状类型的db表和排序中,但这是一次性的努力,所以寻找更灵活的东西......
提前致谢.
当有多个列时,对使用带有Sweave的xtable有疑问.我正在处理的表有大约25列和5行.确切的列数不知道是动态的.
我跑的时候说,
table1 < - table(df $ someField)
我得到一个基本上超过页面长度的表.
ColA ColB ColC
---------------------------
RowA 1 2 3 ......
RowB 3 4 6 ......
Run Code Online (Sandbox Code Playgroud)
如果做一个xtable,并通过Sweave运行,
xtable(table1, caption="some table")
Run Code Online (Sandbox Code Playgroud)
它溢出来了.
我正在寻找的是,像,
ColA ColB ColC
---------------------------
RowA 1 2 3
RowB 3 4 6
ColD ColE ColF
---------------------------
RowA 11 9 34
RowB 36 8 65
Run Code Online (Sandbox Code Playgroud)
使用\ hline等标记.基本上,将xtable分成每个"子表"5列的部分.
我也在批处理作业中运行它,所以无法通过在Rnw文件上运行Sweave生成解决方案,无法对单个文件进行更改.
提前致谢,
问候,
我正在研究一个需要逐元素矩阵乘法的代码.我试图在Rcpp中实现这个,因为代码需要一些昂贵的循环.我对Rcpp相当新,可能会遗漏一些东西,但我不能让元素明确的矩阵乘法起作用.
// [[Rcpp::export]]
NumericMatrix multMat(NumericMatrix m1, NumericMatrix m2) {
NumericMatrix multMatrix = m1 * m2 // How can this be implemented ?
}
Run Code Online (Sandbox Code Playgroud)
我可能会遗漏一些非常微不足道的东西,并想问是否有任何方法可以做到这一点(除了使用循环迭代每个元素并乘以).
提前致谢.
有人可以指出我们如何使用tapply(或任何其他方法,plyr等)将多个函数应用于同一列,以便可以在不同的列中获得结果.例如,如果我有一个数据帧
User MoneySpent
Joe 20
Ron 10
Joe 30
...
Run Code Online (Sandbox Code Playgroud)
我希望得到的结果是MoneySpent + Occurences数量的总和.
我使用了像 -
f <- function(x) c(sum(x), length(x))
tapply(df$MoneySpent, df$Uer, f)
Run Code Online (Sandbox Code Playgroud)
但这不会将其分成列,给出类似的说法,
Joe Joe 100, 5 # The sum=100, number of occurrences = 5, but it gets juxtaposed
Run Code Online (Sandbox Code Playgroud)
提前致谢,
拉吉