小编xbs*_*bsd的帖子

R Shiny设置DataTable列宽

我试图在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)

r shiny dt

39
推荐指数
2
解决办法
3万
查看次数

从长到大格式重塑大数据的有效方法 - 类似于dcast

这个问题适用于创建"宽"表,类似于您可以使用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)

parallel-processing r data.table

22
推荐指数
1
解决办法
4965
查看次数

在data.table上进行透视,类似于重塑熔化函数

我在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都是唯一的.

提前致谢.

r reshape data.table

19
推荐指数
3
解决办法
4448
查看次数

R foreach与.combine = rbindlist

我使用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)

有没有人能够做到这一点?

提前致谢.

r data.table

15
推荐指数
2
解决办法
1万
查看次数

使用fread的R中data.table的行限制

我想知道使用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方法可以更快地完成这项工作,但我不确定它是如何实现的.

提前致谢.

r rcpp data.table

12
推荐指数
1
解决办法
6399
查看次数

使用带有longtable选项的xtable时重复标题

有没有办法在生成带有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)

这样可以正常工作,但是当表格滚动到新页面时,标题不会重复.有什么建议 ?

latex r longtable xtable

10
推荐指数
1
解决办法
8421
查看次数

当你有足够的内存时,最快的方式来分类巨大的(50-100 GB)文件

当数据不适合内存时,网上有很多关于在Unix上对大文件进行排序的讨论.通常使用mergesort和variants.

Hoewever,如果假设有足够的内存来容纳整个数据,那么最有效/最快的排序方式是什么?csv文件大约为50 GB(> 10亿行),并且有足够的内存(数据大小的5倍)来保存整个数据.

我可以使用Unix排序,但仍然需要> 1小时.我可以使用任何必要的语言,但我主要寻找的是速度.我知道我们可以将数据加载到一个柱状类型的db表和排序中,但这是一次性的努力,所以寻找更灵活的东西......

提前致谢.

unix sorting memory-management

10
推荐指数
1
解决办法
8549
查看次数

将xtable输出拆分为子表

当有多个列时,对使用带有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生成解决方案,无法对单个文件进行更改.

提前致谢,

问候,

  • 拉吉.

r sweave

9
推荐指数
1
解决办法
3160
查看次数

Rcpp中的元素智能矩阵乘法

我正在研究一个需要逐元素矩阵乘法的代码.我试图在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)

我可能会遗漏一些非常微不足道的东西,并想问是否有任何方法可以做到这一点(除了使用循环迭代每个元素并乘以).

提前致谢.

rcpp

7
推荐指数
1
解决办法
3626
查看次数

使用tapply将多个函数应用于列

有人可以指出我们如何使用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)

提前致谢,

拉吉

r

6
推荐指数
2
解决办法
4327
查看次数