我正在编写关于每个用户的数据使用情况的报告。我有一个包含四列的数据框:名字,姓氏,用户ID(字符)和用户的磁盘使用情况(以兆字节为单位。
我不想显示诸如15360或0.32之类的值,而是希望显示人类可读取的值,例如15.36 GB或320 kB,包括单位。这需要将列数据转换为字符并销毁排序。
是否可以提供两个值:一个显示在表中,另一个("规范")值用于排序?
答案 0 :(得分:1)
是的,我假设您使用DT在Shiny中显示数据帧。您可以使用columnDefs将隐藏列用作源以对另一列进行排序。例如:
library(DT)
df=data.frame(name= LETTERS[1:10],sizebytes= runif(10,1,2000000000))
df$size = sapply(df$sizebytes, function(x) {utils:::format.object_size(x, "auto")})
df = df[order(df$sizebytes,decreasing=TRUE),]
# here, 2 and 3 are the column indices of 'size' and 'sizebytes' respectively.
columndefs = list(list(orderData=2, targets= 3),
list(targets= 2,visible= F,searchable= F))
datatable(df,options=list(columnDefs = columndefs))
如您所见,我们按列sizebytes
排序,但只显示列size
。每当用户根据size
列对数据表进行排序时,sizebytes
的数值就会用于对表进行实际排序。希望这有帮助!