我知道有关在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(+)。
我希望这很有道理-谢谢大家的帮助!
答案 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);
}
答案 1 :(得分:0)
谢谢大家的回答!
事实证明,主数据文件本身的结构存在问题。感谢您的解决方案!