【问题标题】:Grouping rows or columns of data in R在 R 中对数据的行或列进行分组
【发布时间】:2010-01-10 05:45:43
【问题描述】:

我正在尝试将一些数据导入 R 并且没有太多运气将相关数据行分组在一起。

示例: 有一组问题,例如{A,B,C,D}。每个问题都有两个正在测量的感兴趣的变量:“x”和“y”。 每个变量都根据一些简单的统计数据进行分析:min、max、mean、stddev。

所以,我的输入数据是这样的:

      Min  Max  Mean  StdDev
A
  x   3    10   6.6   2.1 
  y   2    5    3.2   1.7
B
  x   3    10   6.6   2.1 
  y   2    5    3.2   1.7
C
  x   3    10   6.6   2.1 
  y   2    5    3.2   1.7
D
  x   3    10   6.6   2.1 
  y   2    5    3.2   1.7

有没有办法在 R 中保留这些数据的结构? 一个类似的问题是创建列组(例如将表格向右翻转 90 度)。

【问题讨论】:

    标签: r


    【解决方案1】:

    您实际上有很多选择:数据框(关系表)或列表。以下代码将展示如何创建数据框,然后将其拆分为包含元素 {x,y} 或 {A,B,C,D} 的列表:

    > txt <- "      Min  Max  Mean  StdDev
    + A
    +   x   3    10   6.6   2.1 
    +   y   2    5    3.2   1.7
    + B
    +   x   3    10   6.6   2.1 
    +   y   2    5    3.2   1.7
    + C
    +   x   3    10   6.6   2.1 
    +   y   2    5    3.2   1.7
    + D
    +   x   3    10   6.6   2.1 
    +   y   2    5    3.2   1.7
    + "
    > 
    > data <- head(readLines(textConnection(txt)),-1)
    > fields <- strsplit(sub("^[ ]+","",data[!nchar(data)==1]),"[ ]+")
    > DF <- `names<-`(data.frame(rep(data[nchar(data)==1],each=2), ## letters
    +                            do.call(rbind,fields[-1])),       ## data
    +                 c("Letter","xy",fields[[1]]))                ## colnames
    > split(DF,DF$xy)
    $x
      Letter xy Min Max Mean StdDev
    1      A  x   3  10  6.6    2.1
    3      B  x   3  10  6.6    2.1
    5      C  x   3  10  6.6    2.1
    7      D  x   3  10  6.6    2.1
    
    $y
      Letter xy Min Max Mean StdDev
    2      A  y   2   5  3.2    1.7
    4      B  y   2   5  3.2    1.7
    6      C  y   2   5  3.2    1.7
    8      D  y   2   5  3.2    1.7
    
    > split(DF,DF$Letter)
    $A
      Letter xy Min Max Mean StdDev
    1      A  x   3  10  6.6    2.1
    2      A  y   2   5  3.2    1.7
    
    $B
      Letter xy Min Max Mean StdDev
    3      B  x   3  10  6.6    2.1
    4      B  y   2   5  3.2    1.7
    
    $C
      Letter xy Min Max Mean StdDev
    5      C  x   3  10  6.6    2.1
    6      C  y   2   5  3.2    1.7
    
    $D
      Letter xy Min Max Mean StdDev
    7      D  x   3  10  6.6    2.1
    8      D  y   2   5  3.2    1.7
    

    【讨论】:

    • 谢谢斯蒂芬。这很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多