【问题标题】:Converting dataframe levels into columns in R将数据框级别转换为 R 中的列
【发布时间】:2015-09-08 20:32:45
【问题描述】:

假设我有一个包含 3 列的数据框,如下所示:

Sample  Compound     Area
1   A     Deet       22196836.0
2   A     Allethrin  NA
3   B     Deet       12890878.4
4   B     Allethrin  133063.1
  etc

Sample 列有 12 个级别,Compound 有 324 个级别,整个数据框总共有 3888 个观察值。 我将如何将“样本”级别转换为单个列,将“复合”级别转换为行并相应地填写相应的“区域”,如下所示:

                 A            B           C            D
1   Deet         22196836.0   12890878.4
2   Allethrin    NA           133063.1

我对 R 知之甚少,如果这是基本知识,我深表歉意。我尝试搜索,但不认为我在这里使用了正确的术语来为我提供任何有用的结果。

【问题讨论】:

    标签: r type-conversion


    【解决方案1】:

    使用reshape2 包,您可以将其重塑为宽格式:

    dcast(Compound~Sample,data=dat)
    
    ##    Compound        A          B
    ## 1 Allethrin       NA   133063.1
    ## 2      Deet 22196836 12890878.4
    

    【讨论】:

      【解决方案2】:

      您的数据是“长格式”,而您希望它是“宽格式”。见here for a quick explanation

      在 R 中,有多种方法可以在这些模式之间重塑数据。tidyr 是专门为此编写的包:

      library(tidyr)
      spread(dta, Sample, Area)
         Compound        A          B
      1 Allethrin       NA   133063.1
      2      Deet 22196836 12890878.4
      

      【讨论】:

        【解决方案3】:

        或者只是使用 R 中包含的 stats 包:

        reshape(df, timevar="Sample", idvar="Compound", direction="wide")
        
        ##    Compound   Area.A     Area.B
        ## 1      Deet 22196836 12890878.4
        ## 2 Allethrin       NA   133063.1
        

        【讨论】:

        • 效果很好!非常感谢您的帮助!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-17
        • 1970-01-01
        • 2015-04-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多