【问题标题】:Creating a true flat file from a semi-flat file从半平面文件创建真正的平面文件
【发布时间】:2014-09-08 15:21:26
【问题描述】:

我有以下数据集(这是前 10 行,有 >500)。每一行都描绘了空间中的一个独特位置以及设置该站点的日期和工作人员。 NUMGB 列是在该站点捕获了多少只熊,GBIDSEX1 到 GBIDSEX8 提供了在该站点捕获的那些熊的个体标识符

df <- read.table(text= 'CELL SITE INSTCREW INSTDATE NUMGB GBIDSEX1 GBIDSEX2 GBIDSEX3 GBIDSEX4 GBIDSEX5 GBIDSEX6 GBIDSEX7 GBIDSEX8
1 1 DF/EJ 2000-06-02          
2 1 DF/EJ 2000-06-02  3 F6514-001 M6514-012 F6514-023     
3 1 DF/EJ 2000-06-02  1 SPTEST       
4 1 DF/EJ 2000-06-02          
5 1 DF/EJ 2000-06-02  1 M6643-015       
6 1 DF/EJ 2000-06-02          
7 1 DF/EJ 2000-06-02  1 M6514-012       
8 1 DF/EJ 2000-06-02  2 F6566-001 M6509-005      
9 1 DF/EJ 2000-06-02          
10 1 DF/KP 2000-06-01  5 M6505-001  M6505-010 F6514-001 M6514-012 F6514-02   ' ,header=TRUE, sep=" ")

对于我想做的分析,我需要将每个熊的 ID 作为唯一的行,其中还包含站点、工作人员和日期信息。这是我希望数据看起来如何的示例:

CELL    SITE    INSTCREW    INSTDATE    NUMGB   GBIDSEX
2   1   DF/EJ   2000-06-02  3   F6514-001
2   1   DF/EJ   2000-06-02  3   M6514-012
2   1   DF/EJ   2000-06-02  3   F6514-023
3   1   DF/EJ   2000-06-02  1   SPTEST
5   1   DF/EJ   2000-06-02  1   M6643-015
7   1   DF/EJ   2000-06-02  1   M6514-012
8   1   DF/EJ   2000-06-02  2   F6566-001
8   1   DF/EJ   2000-06-02  2   M6509-005
10  1   DF/KP   2000-06-01  5   M6505-001
10  1   DF/KP   2000-06-01  5   M6505-010
10  1   DF/KP   2000-06-01  5   F6514-001
10  1   DF/KP   2000-06-01  5   M6514-012
10  1   DF/KP   2000-06-01  5   F6514-023

我想剔除没有抓到熊的行,这可以通过子集函数轻松完成:

dfcull<-subset(df, NUMGB>0)

但我不确定如何为每个 GBIDSEX 创建唯一的行。有什么想法吗?

【问题讨论】:

    标签: r reshape flat-file


    【解决方案1】:

    你可以很容易地使用来自“reshape2”的melt

    library(reshape2)
    df[df == ""] <- NA
    melt(df, na.rm=TRUE, 
         id.vars=c("CELL", "SITE", "INSTCREW", "INSTDATE", "NUMGB"))
    #    CELL SITE INSTCREW   INSTDATE NUMGB variable     value
    # 2     2    1    DF/EJ 2000-06-02     3 GBIDSEX1 F6514-001
    # 3     3    1    DF/EJ 2000-06-02     1 GBIDSEX1    SPTEST
    # 5     5    1    DF/EJ 2000-06-02     1 GBIDSEX1 M6643-015
    # 7     7    1    DF/EJ 2000-06-02     1 GBIDSEX1 M6514-012
    # 8     8    1    DF/EJ 2000-06-02     2 GBIDSEX1 F6566-001
    # 10   10    1    DF/KP 2000-06-01     5 GBIDSEX1 M6505-001
    # 12    2    1    DF/EJ 2000-06-02     3 GBIDSEX2 M6514-012
    # 18    8    1    DF/EJ 2000-06-02     2 GBIDSEX2 M6509-005
    # 20   10    1    DF/KP 2000-06-01     5 GBIDSEX2 M6505-010
    # 22    2    1    DF/EJ 2000-06-02     3 GBIDSEX3 F6514-023
    # 30   10    1    DF/KP 2000-06-01     5 GBIDSEX3 F6514-001
    # 40   10    1    DF/KP 2000-06-01     5 GBIDSEX4 M6514-012
    # 50   10    1    DF/KP 2000-06-01     5 GBIDSEX5  F6514-02
    

    【讨论】:

    • 当我对自己的数据执行此操作时,我收到以下警告消息:“警告消息:度量变量的属性不相同;它们将被删除”我使用上面提供的数据和你提供的融化功能,但我仍然收到同样的错误。我试图将所有 GBIDSEX 列作为.factor,但这也不起作用
    • @ctlamb,您实际上希望将它们全部设为character,而不是因素。但是,这只是一个警告,它们具有不同的属性(例如,因子水平)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 2023-03-22
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多