R data.frame;获取列中的值范围

时间:2013-09-19 21:10:52

标签: r aggregate

我无法弄清楚如何做到这一点。我在R中有一个data.frame。它看起来像这样:

Scores <- read.table(text = "
        ID Test1 Test2 Test3 Final
1 Student1    20    23    21    48
2 Student2    16    15    18    36
3 Student3    25    20    22    40
4 Student4    14    19    18    42
5 Student5    10    15    14    30
")

我想要的是创建一个新的数据对象,其中包含每个测试的值范围,包括final。所以它看起来像这样:

result <- read.table(text = "
       min max
Test1  10  25
Test2  15  23
Test3  14  22
Final  30  48
")

老实说,无论是仅列出最大值和最小值,还是实际计算差值,我都无所谓。我只是无法找到实现这一点的方法,这不是一种不必要的复杂。我知道我可以手动和单独拉出列,但必须有一些更好的方法来做到这一点。涉及by()tapply()的内容?但我无法让他们工作。

有什么想法吗?

6 个答案:

答案 0 :(得分:10)

更简单一点:

> t(sapply(test, range))
  [,1] [,2]
a    1    3
b    2    5
d    1    2

答案 1 :(得分:1)

试试这个,包含可重复的例子。

test <- data.frame(a=c(1,2,3),b=c(2,3,5),d=c(1,2,2))
data.frame(min=sapply(test,min),max=sapply(test,max))

编辑:添加@Blue Magister请求可重现的示例:查看?dput ?structure以了解如何在此处发布data.frame,例如:dput(得分)。

答案 2 :(得分:0)

set.seed(1)
scores <- data.frame(ID=paste0("Student",1:5),
                     T1=sample(100,5),
                     T2=sample(100,5),
                     T3=sample(100,5),
                     Final=sample(100,5))

summ <- data.frame(min=apply(scores[,!grepl("ID",colnames(scores))],2,min),
                   max=apply(scores[,!grepl("ID",colnames(scores))],2,max))

> summ
      min max
T1     20  89
T2      6  94
T3     18  74
Final  37  98

答案 3 :(得分:0)

另一种方法:

kk<-Map(function(x) cbind(x,min=min(Scores[,x]),max=max(Scores[,x])), as.list(names(Scores)[-1]))
data.frame(do.call(rbind,kk))
      x min max
1 Test1  10  25
2 Test2  15  23
3 Test3  14  22
4 Final  30  48

答案 4 :(得分:0)

(r_dd <-range(rdu_flights [5])), 这里rdu_flights是我的数据帧,[5]是索引号(可以通过使用names(“ rdu_flights”找到),r_dd是我在调用范围的变量,我认为这很简单。 我得到的结果是 [1] -17293#表示某些航班的出发延迟的最小值和最大值

答案 5 :(得分:0)

colrange<-function(x){
    sapply(x,range)
}

进行colrange功能并插入数据:colrange(scores)