【问题标题】:Restructure data on rows to decrease number of NAs in a dataframe in R重组行上的数据以减少 R 中数据帧中的 NA 数量
【发布时间】:2021-03-13 12:04:05
【问题描述】:

我有一个包含 392 行和 156 列的数据集,表示检测到和未检测到一个物种。每列代表对实地调查的“访问”,而每行代表调查地点,分别表示感兴趣的物种是否记录在每次实地“访问”中,如果没有进行调查,则为 NA在那个特定的时间段内。我按月汇总了我的访问量,因此每列代表“每月访问量”,即给定年份内的 30 天间隔。鉴于我有几年的数据,我创建了连续和连续的月份周期,这些周期跨越了我拥有数据的所有年份。鉴于大多数站点是在不同年份进行的调查,因此每个站点都有几个列(时间段)是唯一的,因此我有很多 NA:我有 0/1 和 59,506 NA 的 1,646 条记录。

我想重组我的数据库,以便我可以删除尽可能多的 NA,方法是不将每一列视为特定时间段,而是将其视为通用时间间隔。因此,不是第 1 列是例如 3/2008-4/2018 的特定时期,而是只有“调查 1”,它将代表每个站点的不同月份和年份。通过在该站点的实际调查期之前删除每个站点的所有 NA,我可以拥有一个更干净、更小的数据库和更少的 NA。想法如下:

从我拥有的这个 df 开始:

df <- read.table(text = "3/2008-4/2018 5/2008-6/2008 7/2009-8/2009 9/2009-10/2009 11/2009-12/2009 01/2010-02/2010 03/2010-04/2010 05/2010-06/2010 07/2010-08/2010
1 NA NA NA NA NA NA 1 1 1 
2 NA NA NA 1 0 NA NA NA NA
3 NA NA NA 0 0 NA NA NA NA
4 0 1 0 1 1 1 NA NA NA
5 0 1 NA NA NA 1 0 1 1")

到这个新的df:

df_new <- read.table(text = "v1 v2 v3 v4 V5 V6
1 1 1 1 NA NA NA
2 1 0 NA NA NA NA
3 0 0 NA NA NA NA
4 0 1 0 1 1 1
5 0 1 1 0 1 1")

谁能帮我创建一个代码来做到这一点?谢谢!

【问题讨论】:

    标签: r missing-data database


    【解决方案1】:

    您可以使用na.omit,然后使用[ 进行子集化以获得相等长度的向量。

    x <- apply(unname(df), 1, na.omit)
    t(sapply(x, "[", 1:max(lengths(x))))
    #  [,1] [,2] [,3] [,4] [,5] [,6]
    #1    1    1    1   NA   NA   NA
    #2    1    0   NA   NA   NA   NA
    #3    0    0   NA   NA   NA   NA
    #4    0    1    0    1    1    1
    #5    0    1    1    0    1    1
    

    【讨论】:

    • 谢谢 GKi,这正是我所需要的! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-02-02
    • 1970-01-01
    • 2014-12-22
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 2021-04-27
    相关资源
    最近更新 更多