相关疑难解决方法(0)

按 R 中的所有列对数据框进行排序

对于具有任意列数的任意矩阵或数据框x,我想这样做:

x=x[order(x[,1], x[,2], ..., x[,ncol(x)]),]
Run Code Online (Sandbox Code Playgroud)

也就是说,我想按第一列排序,然后按第二列排序,...,然后按最后一列排序。这里关于排序的扩展讨论似乎不包含解决方案。这是我的解决方案,它违反了fortune(106)

sortarray = function(x){
    k = ncol(x)
    com = paste("x = x[order(x[,", paste(1:k, collapse = "],x[,"), "]),]", sep = "")
    eval(parse(text = com))
    return(x)}

x = sortarray(x)
Run Code Online (Sandbox Code Playgroud)

这似乎工作正常,但是没有更干净的方法吗?

编辑重复数据删除澄清: 这个问题与建议的重复问题有很大不同(至少对我来说)。上一个问题涉及您明确指定要排序的列的情况。就我而言,我希望自动选择列(特别是所有列),而不是必须在排序命令中键入每个列名称。下面的答案解决了我的问题,与上一个问题的任何答案不同。

r

3
推荐指数
1
解决办法
824
查看次数

重新排序和重新整理R中的列

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

我有一个如下所示的数据集:

x       y     z
1.      1     0.2
1.1     1     1.5
1.2     1     3.
1.      2     8.1
1.1     2     1.0
1.2     2     0.6
Run Code Online (Sandbox Code Playgroud)

我想要的是首先将数据集作为x的函数按递增顺序组织,然后作为y的函数来组织

x       y      z 
1.      1      0.2
1.      2      8.1
1.1     1      1.5
1.1     2      1.
1.2     1      3.
1.2     2      0.6
Run Code Online (Sandbox Code Playgroud)

我知道apply,mapply,tapply等函数重新组织数据集,但我必须承认我并不真正理解它们之间的差异,也不知道如何应用哪些以及何时应用.

谢谢你的建议.

r

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

如何通过R中的第n列对数据帧进行排序

我有两个具有相同列数的数据帧.我正在编写一个函数,它将两个数据帧和一个整数n作为参数,并需要按每个数据集的第n列排序.基本上,我如何在第n列对数据框进行排序而不必知道该列的标签?

r

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

如何使用R创建包含聚合方式的列?

在R中,我在数据帧中有一堆数据,如:

state | zip   | value
______|_______|______
CA    | 94555 | 18
CA    | 94556 | 5
OH    | 12345 | 22
OH    | 12346 | 10
Run Code Online (Sandbox Code Playgroud)

等等.

我希望在每一行中添加一列,列出该状态的平均"值".

我可以通过" (aggregate(data$value, list(State = data$state), mean))" 获得手段的数据框.这给了我一个50行的数据帧,每个状态一个.但是我需要回到原始数据框并将状态的平均值放在属于该状态的行中.

我该怎么做呢?

aggregate r dataframe

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

按两列排序数据框(带条件)

我在R中有以下数据框:

DataTable <- data.frame( Name = c("Nelle","Alex","Thomas","Jeff","Rodger","Michi"), Age = c(17, 18, 18, 16, 16, 16), Grade = c(1,5,3,2,2,4) )

    Name Age Grade
1  Nelle  17     1
2   Alex  18     5
3 Thomas  18     3
4   Jeff  16     2
5 Rodger  16     2
6  Michi  16     4
Run Code Online (Sandbox Code Playgroud)

现在生病将按其Age列对该数据框进行排序.到目前为止没问题:

DataTable_sort_age <- DataTable[with(DataTable, order(DataTable[,2])),]

    Name Age Grade
4   Jeff  16     2
5 Rodger  16     2
6  Michi  16     4
1  Nelle  17     1
2   Alex  18     5
3 Thomas  18     3 …
Run Code Online (Sandbox Code Playgroud)

sorting r conditional-statements dataframe

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

基于 R 中的多列对数据框进行排序

我执行以下代码:

df<-data.frame(word=c("play","win","offer","http"),frequency=c(321,355,123,564),type=c("nonspam","nonspam","spam","spam"))

df=arrange(df,desc(frequency),desc(type))

df=df[order(df[,2],df[,3]),]
Run Code Online (Sandbox Code Playgroud)

结果是:

   word frequency type
4 offer       123    spam
3  play       321    nonspam
2   win       355    nonspam
1  http       564    spam
Run Code Online (Sandbox Code Playgroud)

但我想根据频率类型对数据框进行排序,例如:

word frequency type
    1  http      564    spam
    4  offer     123    spam
    2  win       355    nonspam
    3  play      321    nonspam
Run Code Online (Sandbox Code Playgroud)

sorting r dataframe

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

如何在 Julia 中按多列对数据框进行排序

我想按多列对数据框进行排序。这是我制作的一个简单的数据框。如何按不同的排序类型对每一列进行排序?

using DataFrames

DataFrame(b = ("Hi", "Med", "Hi", "Low"),
      levels = ("Med", "Hi", "Low"),
      x = ("A", "E", "I", "O"), y = (6, 3, 7, 2),
      z = (2, 1, 1, 2))
Run Code Online (Sandbox Code Playgroud)

这里移植过来。

julia

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

操纵data.frames

我有一份样本调查表; 人口统计学的东西.其中一列是country (factor)另一个annual income.现在,我需要计算每个国家的平均值并以新data.framecountry和相应的平均值存储.它应该很简单,但我迷路了.数据如下所示:

Country  Income($) Education ... ... ...
1. USA    90000      Phd
2. UK     94000      Undergrad
3. USA    94000      Highschool
4. UK     87000      Phd
5. Russia 77000      Undergrad
6. Norway 60000      Masters
7. Korea  90000      Phd
8. USA    110000     Masters
.
.
Run Code Online (Sandbox Code Playgroud)

我需要一个最终结果,如:

USA   UK    Russia ...
98000 90000 75000
Run Code Online (Sandbox Code Playgroud)

谢谢.

r dataframe

0
推荐指数
1
解决办法
94
查看次数

在我的基准测试项目中,Base R 对数据集的排序速度比 dplyr 或 data.table 快得多。为什么是这样?我们都应该使用 Base R 吗?

我正在比较不同数据操作包在不同大小的数据集上对某些操作的执行情况。

我生成了一个虚拟数据集(iris x iris 的笛卡尔积。毫无意义,但本质上只是一个 22500 x 10 数据集)。

library(dplyr)
library(data.table)
library(rbenchmark)

iris_big <- merge(x = iris, y = iris, by = NULL) 

iris_big_dt <- as.data.table(iris_big) #for data.table

benchmark("Base R" = {
            iris_big[base::order("Petal.Width.y")]
          },
          "dplyr" = {
            dplyr::arrange(iris_big,"Petal.Width.y")
          },          

          "data.table" = {
            data.table::setorder(iris_big_dt,"Petal.Width.y")
          },
          replications = 30,
          columns = c("test", "replications", "elapsed",
                      "relative", "user.self", "sys.self"))

Run Code Online (Sandbox Code Playgroud)

输出::

| test       | replications   |elapsed|...|sys.self|
| --------   | -------------- |----   |---|---|
| Base R     | 30             |0.00   |...|0.00|
| data.table | 30             |0.04   |...|0.02| …
Run Code Online (Sandbox Code Playgroud)

performance r dplyr data.table

0
推荐指数
1
解决办法
1133
查看次数