Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R DataTable通过读取列中的从左到右对数字进行排序_R_Sorting_Dataframe_Dplyr_Dt - Fatal编程技术网

R DataTable通过读取列中的从左到右对数字进行排序

R DataTable通过读取列中的从左到右对数字进行排序,r,sorting,dataframe,dplyr,dt,R,Sorting,Dataframe,Dplyr,Dt,使用datatable时,数字按从左到右而不是从右到左的顺序进行排序。我也把它转换成了数字。为什么会这样?见*数字 它对所有列都执行相同的操作 这里有一个例子:950应该是第一个,而不是96.67 Items RN.2015 RN.2016 Change.RN London 30 59 **96.67** Tokyo 2 21 **950** Paris 2 21 950 Seoul 2 21

使用datatable时,数字按从左到右而不是从右到左的顺序进行排序。我也把它转换成了数字。为什么会这样?见*数字 它对所有列都执行相同的操作

这里有一个例子:950应该是第一个,而不是96.67

Items   RN.2015 RN.2016 Change.RN
London  30      59      **96.67**
Tokyo   2       21      **950**
Paris   2       21      950
Seoul   2       21      950
New York20      39      95
Orlando 18      35      94.44
Nice    3       31      **933.3**
反应式代码:

library(dplyr)
fileInfo$RN <- as.numeric(as.character(fileInfo$RN))
perChange<-fileInfo %>%
group_by_(input$selCol)  %>%
   summarise( 
      RN.2015 = sum(RN[Year=="2015"]),
      RN.2016 = sum(RN[Year=="2016"])
   )%>%
   mutate(
       Change.RN = delt(RN.2015,RN.2016)
)
作用

delt <- function(x,y) {ifelse(is.finite((y-x)/x*100),paste0(formatC((y-x)/x*100),"%"),"")}
数据:

在函数delt中,paste0返回一个字符向量,因此该列可能会转换为字符

上面的排序行为与数字值被错误地存储为字符向量时的排序方式一致。96.6>955>94等


使用strdata并确保column Change.RN实际上是一个数字。如果不匹配,请使用as.numeric进行转换。

代码和粘贴的文本输入数据不匹配。首先感谢@zx8754的向下投票,可能是我做的,也可能不是。第二,编辑你的帖子,我可能会投赞成票,也可能不会。无论如何,我试图理解你的问题,但同时也试图帮助可能有类似问题的其他人,而不仅仅是你个人。@zx8754好的,我编辑过
Data <- data.frame(
    Items = c("London","Tokyo","Paris","Seoul","New York","Orlando","Nice"),
    RN.2015 = c(30,2,2,2,20,18,3),
    RN.2016 = c(59,21,21,21,39,35,31)
)