根据匹配变量合并R中长度不均匀的数据帧?

时间:2019-02-06 19:01:36

标签: r dataframe

我知道有关在R中合并数据帧的问题很常见,但是经过艰苦的搜索之后,我还没有找到解决问题的方法。

我在R中有两个数据框:一个包含有关人口(此处是组织,n =〜4200)的信息,包括其地区,州,县,项目名称等;另一个仅包含509个县-县组合的县和州信息。

我需要将大数据帧与较小数据帧进行匹配,以便最终得到一个合并的数据帧,其中N行等于较小的数据帧。

例如,大型数据框(n =〜4200行)看起来像这样:

County        State    Court     Program  Court.Type  ...   ...  ...
String1       CT       Court1    String1  1
String1       AL       Court2    String2  2
String1       CA       Court3    String3  3
String1       IL       Court4    String4  2

小数据框(n = 509)看起来像这样:

State   County    QuantData   ...   ...
AL      String1   xxxxx
NY      String1   xxxxx
NM      String1   xxxxx

我需要将大型数据框与小型数据框进行匹配,以便将小型数据框的列合并到一个新的数据框中,并与大型数据框的值对齐。

最终,我需要在新数据框中添加509行匹配数据。

为了简化匹配,我这样做:

courts$match = paste(courts$State,courts$County) # courts is the large df
sub$match = paste(sub$State,sub$County # sub is the small df

然后,我这样做了:

df = merge(courts, sub, by="match", all=F) # returns only 4 rows

df = merge(courts, sub, by="match", all=T) # returns well over 4000, but without matching the values

现在,我应该说,在大型数据集中可能会发生多个州县匹配,因为州内的某些县通常在重叠的位置提供感兴趣的多种服务。

但是,在小型数据集中,这些是唯一的州县对。因此,最终合并中最终可能会略大于509,但绝对不能达到4000(+)。

我希望这很有道理-谢谢大家的帮助!

2 个答案:

答案 0 :(得分:0)

您已经尝试了全部。x= T?如果使用all = T,它将所有x和y值保留在表中。

//main.cpp
#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.showFullScreen();

    return a.exec();
}



//mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //sometime later, a popup is shown
    QTimer::singleShot(5000, this, [this]{
        Message msgBox = new MessageBox(message, this);
        msgBox->exec();
    });    
}


//messagebox.cpp
#include "messagebox.h"
#include "ui_messagebox.h"

MessageBox::MessageBox(const QString &message, QWidget *parent) :
    QDialog(parent),
    ui(new Ui::MessageBox)
{
    ui->setupUi(this);
    this->setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint);

    if(parent){
        auto hostRect = parent->geometry();
        this->move(hostRect.center() - this->rect().center());
    }

    ui->label->setText(message);
}

enter image description here

答案 1 :(得分:0)

谢谢大家的回答!

事实证明,主数据文件本身的结构存在问题。感谢您的解决方案!