我有两个数据框(df_a
和df_b
),两个数据框都包含多个列和患者ID。这些列包含有关特定诊断的信息(TRUE
或FALSE
)。我的任务是组合两个数据帧,如果任何数据帧中的值为TRUE
,则值为TRUE
。
实际上df_a
和df_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_a
和df_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
,但我无法弄明白。
答案 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)
使用dplyr
和tidyr
包可以实现非常通用的解决方案。
方法:由于列数可能很多,因此我认为最好先使用gather
以id
,key
和{{1}的形式创建数据帧}}。然后使用val
合并数据帧并应用逻辑派生值(即使一个值为bind_rows
,则组合值将为TRUE
。最后使用TRUE
中的spread
package以原始格式返回数据帧。
tidyr