【问题标题】:R data.frame ; get range of values in columnR data.frame ;获取列中的值范围
【发布时间】:2013-09-19 21:10:51
【问题描述】:

我不知道该怎么做。我在 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
")

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

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

老实说,它只是列出最大值和最小值,还是实际计算差异对我来说并不重要。我只是想不出一种方法来实现这个不是不必要的复杂。我知道我可以手动和单独地拉出列,但必须有一些更好的方法来做到这一点。涉及by()tapply() 的东西?但我就是不能让他们工作。

有什么想法吗?

【问题讨论】:

  • 看起来这是您在 StackOverflow 上的第一个 [r] 问题。欢迎!请在此处查看有关 making a reproducible example 的信息,以帮助我们在这篇文章和未来的文章中回答您的问题。
  • 哦,好吧!我将使用它以供将来参考。谢谢

标签: r aggregate


【解决方案1】:

简单一点:

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

【讨论】:

  • 需要找到一个范围,使用range() - 对我来说似乎是最明智的选择。
  • 有没有办法做到这一点而不会在范围内获得重复值?
  • @MichaelPerdue 你的意思是如果一个范围的最小值和最大值是相同的数字?
  • @SenorO:如果您只希望输出中的唯一值。
  • @MichaelPerdue 这是一个不同的问题。在网站上搜索如何删除数据框中的重复行。
【解决方案2】:

试试这个,包括可重现的例子。

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(scores)。

【讨论】:

  • 好的,感谢您的帮助!摆弄它似乎我所要做的就是使用索引(即test [,i])来获取它们的特定列或范围。非常感谢!
【解决方案3】:
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

【讨论】:

    【解决方案4】:

    另一种方法:

    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
    

    【讨论】:

      【解决方案5】:

      (r_dd

      【讨论】:

        【解决方案6】:
        colrange<-function(x){
            sapply(x,range)
        }
        

        创建一个colrange 函数并插入您的数据:colrange(scores)

        【讨论】:

          猜你喜欢
          • 2021-05-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-12
          • 2021-09-12
          • 2021-08-07
          • 2021-06-14
          相关资源
          最近更新 更多