相关疑难解决方法(0)

按因子对数据框列进行排序

我有一个3列(name,, )的数据框y,sex其中name是字符,y是一个数值,sex是一个因子.

sex<-c("M","M","F","M","F","M","M","M","F")
x<-c("MARK","TOM","SUSAN","LARRY","EMMA","LEONARD","TIM","MATT","VIOLET")
name<-as.character(x)
y<-rnorm(9,8,1)
score<-data.frame(x,y,sex)
score
     name      y     sex
1    MARK  6.767086   M
2     TOM  7.613928   M
3   SUSAN  7.447405   F
4   LARRY  8.040069   M
5    EMMA  8.306875   F
6 LEONARD  8.697268   M
7     TIM 10.385221   M
8    MATT  7.497702   M
9  VIOLET 10.177969   F
Run Code Online (Sandbox Code Playgroud)

如果我想订购,y我会使用:

score[order(score$y),]
        x         y sex
1    MARK  6.767086   M
3   SUSAN  7.447405   F
8    MATT  7.497702   M
2     TOM …
Run Code Online (Sandbox Code Playgroud)

sorting r r-factor

16
推荐指数
2
解决办法
5万
查看次数

R中的列排序最快

我有一个数据框full,我想从中获取最后一列和一列v.然后我想以v最快的方式对两列进行排序.full从csv读入,但这可以用于测试(包括一些现实主义的NA):

n <- 200000
full <- data.frame(A = runif(n, 1, 10000), B = floor(runif(n, 0, 1.9)))
full[sample(n, 10000), 'A'] <- NA
v <- 1
Run Code Online (Sandbox Code Playgroud)

我在v这里有一个,但实际上它可以改变,并full有很多专栏.


我尝试过对数据框,数据表和矩阵进行排序ordersort.list(从这个线程中获取一些想法).所有这些的代码:

# DATA FRAME

ord_df <- function() {
  a <- full[c(v, length(full))]
  a[with(a, order(a[1])), ]
}

sl_df <- function() {
  a <- full[c(v, length(full))]
  a[sort.list(a[[1]]), ] 
}


# DATA TABLE

require(data.table)

ord_dt <- function() {
  a <- …
Run Code Online (Sandbox Code Playgroud)

r data.table

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

在基准测试期间多次运行R中的函数

我试图测量R中函数的计算时间system.time().我想运行该函数几百次以获得平均值,但我不想复制和粘贴那么多次.有更简单的方法吗?

benchmarking r function

14
推荐指数
3
解决办法
3284
查看次数

时间序列面板数据的一般滞后

我有一个类似于此的数据集

User    Date        Value
A       2012-01-01  4
A       2012-01-02  5   
A       2012-01-03  6
A       2012-01-04  7
B       2012-01-01  2
B       2012-01-02  3   
B       2012-01-03  4
B       2012-01-04  5
Run Code Online (Sandbox Code Playgroud)

我想创造一个Value尊重的滞后User.

User    Date        Value   Value.lag
A       2012-01-01  4       NA
A       2012-01-02  5       4
A       2012-01-03  6       5
A       2012-01-04  7       6
B       2012-01-01  2       NA
B       2012-01-02  3       2   
B       2012-01-03  4       3
B       2012-01-04  5       4
Run Code Online (Sandbox Code Playgroud)

我在循环中做得非常低效

df$value.lag1<-NA
levs<-levels(as.factor(df$User))
levs
  for (i in 1:length(levs)) {
    temper<- subset(df,User==as.numeric(levs[i])) …
Run Code Online (Sandbox Code Playgroud)

r time-series lag

11
推荐指数
2
解决办法
8632
查看次数

重新排序R中的列名称

可能重复:
如何按R中的列对数据帧进行排序

这是数据集:

odervect <- c("xaf", "c3a", "c3b", "ka101","jk12", "cd101", "kl01v", "klm1")
odervect
[1] "xaf" "c3a"   "c3b"   "ka101" "jk12"  "cd101" "kl01v" "klm1"  

dfd <- data.frame(ka101 = 101:110,c3a = 1:10, kl01v = 301:310, xaf = 11:20,
    c3b = 41:50, cd101 = 61:70)


 dfd 

   ka101 c3a kl01v xaf c3b cd101
1    101   1   301  11  41    61
2    102   2   302  12  42    62
3    103   3   303  13  43    63
4    104   4   304  14  44    64
5    105   5   305 …
Run Code Online (Sandbox Code Playgroud)

sorting r dataframe

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

按名称包含在单个对象中的多个列对data.frame进行排序?

我希望data.frame按多列排序,理想情况下使用基本R而不使用任何外部包(尽管如果必要,也可以这样).阅读了如何按列对数据框进行排序?,我知道order()只要我这样做,我就能用这个功能完成这个:

  1. 知道每个列的显式名称.
  2. 有一个单独的对象,表示要排序的每个列.

但是,如果我只有一个包含多个列名的向量,其长度是事先未知的呢?

说矢量被调用sortnames.

data[order(data[, sortnames]), ]将无法工作,因为order()将其视为单个排序参数.

data[order(data[, sortnames[1]], data[, sortnames[2]], ...), ] 当且仅当我指定了sortname值的确切正确数量时才会工作,我不会事先知道.

我看过的但并不完全满意的事情:

  1. eval(parse(text=paste("data[with(data, order(", paste(sortnames, collapse=","), ")), ]"))).也许这很好,但我看到很多人讨厌使用eval(),所以要求替代品似乎是值得的.
  2. 我或许可以使用该Deducer库来实现这一点sortData(),但就像我说的,我宁愿避免使用外部包.

如果我对不使用外包装太顽固,请告诉我.我会挺过来的.所有想法提前赞赏!

r

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

为sort.data.frame创建通用/方法一致性的最佳方法?

我终于决定将在互联网上浮动的sort.data.frame方法放入R包中.它只是被要求太多而无法留给临时分发方法.

但是,它使用参数编写,使其与泛型排序函数不兼容:

sort(x,decreasing,...)
sort.data.frame(form,dat)
Run Code Online (Sandbox Code Playgroud)

如果我sort.data.frame改为将减少作为参数sort.data.frame(form,decreasing,dat)并且丢弃减少,那么它就会失去它的简单性,因为你总是必须指定dat=并且不能真正使用位置参数.如果我将其添加到最后sort.data.frame(form,dat,decreasing),则顺序与泛型函数不匹配.如果我希望减少被赶上点`sort.data.frame(form,dat,...),那么当使用基于位置的匹配时,我相信泛型函数会将第二个位置分配给减少,它会得到丢弃.协调这两个功能的最佳方法是什么?

完整的功能是:

# Sort a data frame
sort.data.frame <- function(form,dat){
# Author: Kevin Wright
# http://tolstoy.newcastle.edu.au/R/help/04/09/4300.html
# Some ideas from Andy Liaw
# http://tolstoy.newcastle.edu.au/R/help/04/07/1076.html
# Use + for ascending, - for decending.
# Sorting is left to right in the formula
# Useage is either of the following:
# sort.data.frame(~Block-Variety,Oats)
# sort.data.frame(Oats,~-Variety+Block)

# If dat is the formula, then switch form and dat
  if(inherits(dat,"formula")){
    f=dat
    dat=form
    form=f
  } …
Run Code Online (Sandbox Code Playgroud)

generics methods r class

8
推荐指数
2
解决办法
1960
查看次数

dplyr按反向字母顺序排列

我很好奇为什么排列功能不会按字母顺序工作,但不能反向按字母顺序排列.

df <- data.frame(string = as.character(c("b", "a", "c")), stringsAsFactors = F) 

df %>% arrange(string) #works

df %>% arrange(-string) #does not work
Run Code Online (Sandbox Code Playgroud)

我只是使用完全错误的方法来实现我想要完成的任务吗?

r dplyr

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

在列表上订购

我遇到了一个应用程序,我需要按列号对data.frame进行排序,而且通常的解决方案似乎都不允许这样做.

上下文正在创建一个as.data.frame.by方法.由于by对象将其最后一列作为值列,而将第一列ncol-1列作为索引列. melt返回它向后排序 - 索引3,然后索引2,然后索引1.为了兼容latex.table.by我想要向前排序.但是我在以足够通用的方式做这件事时遇到了麻烦.下面函数中注释掉的行是迄今为止我最好的尝试.

as.data.frame.by <- function( x, colnames=paste("IDX",seq(length(dim(x))),sep="" ), ... ) {
  num.by.vars <- length(dim(x))
    res <- melt(unclass(x))
  res <- na.omit(res)
    colnames(res)[seq(num.by.vars)] <- colnames
    #res <- res[ order(res[ , seq(num.by.vars)] ) , ] # Sort the results by the by vars in the heirarchy given
    res
}

dat <- transform( ChickWeight, Time=cut(Time,3), Chick=cut(as.numeric(Chick),3) )
my.by <- by( dat, with(dat,list(Time,Chick,Diet)), function(x) sum(x$weight) )
> as.data.frame(my.by)
            IDX1         IDX2 IDX3 value
1 …
Run Code Online (Sandbox Code Playgroud)

r

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

按绝对值排序

有谁知道如何用R绝对值对矢量进行排序,(-2, 3, 1) -> (1, -2, 3)等等?

如果我在python中这样做,我会创建一对每个值及其符号,按绝对值对对列表进行排序然后重新应用符号,但我对R很新,所以不知道如何做到这一点.

干杯

sorting r

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