R:根据其他两列的匹配情况替换列

时间:2019-03-16 17:20:07

标签: r dataframe dependencies multiple-columns

让我们假设有两个巨大的数据帧(不同长度)的两列,例如:

 df1       df2
A  1      C  X
A  1      D  X
B  4      C  X
A  1      F  X
B  4      A  X
B  4      B  X
C  7      B  X

每次第1列中都存在一个匹配项时,应将X替换为df1列2中的数据。如果df2的第一列包含元素,但仍不在df1的第一列(F,D)中,则X应替换为0。

因此,有一个巨大的数据帧,循环中的循环将无用。

解决方案应如下所示:

 df1       df2
A  1      C  7
A  1      D  0
B  4      C  7
A  1      F  0
B  4      A  1
B  4      B  4
C  7      B  4

提前谢谢

1 个答案:

答案 0 :(得分:0)

由于'df1'中存在重复的行,因此我们可以获得transform: rotate(90deg);

browser.setDownloadListener(new DownloadListener()
    {
        @Override
        public void onDownloadStart(String url, String userAgent,
                                    String contentDisposition, String mimeType,
                                    long contentLength) {

            DownloadManager.Request request = new DownloadManager.Request(
                    Uri.parse(url));


            request.setMimeType(mimeType);


            String cookies = CookieManager.getInstance().getCookie(url);


            request.addRequestHeader("cookie", cookies);


            request.addRequestHeader("User-Agent", userAgent);


            request.setDescription("Downloading file...");


            request.setTitle(URLUtil.guessFileName(url, contentDisposition,
                    mimeType));


            request.allowScanningByMediaScanner();


            request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
            request.setDestinationInExternalPublicDir(
                    Environment.DIRECTORY_DOWNLOADS, URLUtil.guessFileName(
                            url, contentDisposition, mimeType));
            DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
            dm.enqueue(request);
            Toast.makeText(getApplicationContext(), "Downloading File",
                    Toast.LENGTH_LONG).show();
        }});

然后,使用unique获取idnex

df3 <- unique(df1)

并根据索引分配

match

如果没有匹配项,则为i1 <- match(df2$Col1, df3$Col1) ,可以将其更改为0

df2$Col2 <- df3$Col2[i1]

或者通过NA,通过df2$Col2[is.na(df2$Col2)] <- 0 df2 # Col1 Col2 #1 C 7 #2 D 0 #3 C 7 #4 F 0 #5 A 1 #6 B 4 #7 B 4 在“ Col1”上进行分配,并从“ df3”中将Col2分配给“ Col2”(在从第二个数据中删除了Col2之后)。 / p>

data.table

数据

join