什么是"融合的最佳方式"两个数据帧?

时间:2018-02-12 05:22:40

标签: r

我有两个数据框(df_adf_b),两个数据框都包含多个列和患者ID。这些列包含有关特定诊断的信息(TRUEFALSE)。我的任务是组合两个数据帧,如果任何数据帧中的值为TRUE,则值为TRUE

实际上df_adf_b中的行数不同。匹配应使用id完成。两个数据框都具有相同的列集。

df_a <- data.frame(id = 1:10,
                 dg_a = c(T, T, T, F, F, F, T, T, F, T), 
                 dg_b = c(F, F, F, F, T, T, F, T, T, F))

df_b <- data.frame(id = 1:10, 
                 dg_a = c(F, F, F, T, F, F, F, T, T, T), 
                 dg_b = c(F, T, T, F, F, T, F, T, F, F))

即。在合并数据框df_adf_b之后,我应该获得df_c

>df_c
   id  dg_a  dg_b
1   1  TRUE FALSE
2   2  TRUE  TRUE
3   3  TRUE  TRUE
4   4  TRUE FALSE
5   5 FALSE  TRUE
6   6 FALSE  TRUE
7   7  TRUE FALSE
8   8  TRUE  TRUE
9   9  TRUE  TRUE
10 10  TRUE FALSE

在R中这样做的最佳方式是什么?我尝试了不同类型的joins,但我无法弄明白。

3 个答案:

答案 0 :(得分:2)

您只需使用|操作:

df_c <- data.frame(id = 1:10,
                   dg_a = df_a$dg_a | df_b$dg_a,
                   dg_b = df_a$dg_b | df_b$dg_b)

答案 1 :(得分:2)

这是一个import React, { Component } from 'react'; import { render } from 'react-dom'; import { Route, NavLink, HashRouter } from 'react-router-dom'; import { Container, Row, Button } from 'reactstrap'; import { ReactTable } from 'react-table'; import { makeData, Logo, Tips } from './Utils'; import "react-table/react-table.css"; class Admin extends Component { constructor() { super(); this.state = { data: makeData() }; } render() { const { data } = this.state; return ( <div> <ReactTable data={data} columns={[ { Header: "Name", columns: [ { Header: "First Name", accessor: "firstName" }, { Header: "Last Name", id: "lastName", accessor: d => d.lastName } ] }, { Header: "Info", columns: [ { Header: "Age", accessor: "age" }, { Header: "Status", accessor: "status" } ] }, { Header: 'Stats', columns: [ { Header: "Visits", accessor: "visits" } ] } ]} defaultPageSize={10} className="-striped -highlight" /> <br /> <Tips /> <Logo /> </div> ); } } export default Admin; // render(<Admin/>, document.getElementById("root")); 解决方案,考虑到两个data.frames中的行数可能不同:

dplyr

这将包括来自两个data.frames的行,即使没有匹配项也是如此;查看其他行为的其他library(dplyr) full_join(df_a, df_b, by = "id") %>% transmute(id, dg_a = dg_a.x | dg_a.y, dg_b = dg_b.x | dg_b.y) 联接函数。

答案 2 :(得分:1)

使用dplyrtidyr包可以实现非常通用的解决方案。

方法:由于列数可能很多,因此我认为最好先使用gatheridkey和{{1}的形式创建数据帧}}。然后使用val合并数据帧并应用逻辑派生值(即使一个值为bind_rows,则组合值将为TRUE。最后使用TRUE中的spread package以原始格式返回数据帧。

tidyr