如何从另一个数据帧中过滤一个数据帧,同时还在R中的第二个数据帧中添加一个列

时间:2018-08-14 05:42:32

标签: r dataframe join dplyr

我想知道做一个简单功能的最简单方法,其目的是:

  1. 我想使用ID *从第二个数据帧中过滤第一个数据帧。
  2. 我还想从与链接到的ID *相对应的第二列中向过滤后的数据添加新列。

我提供了一个示例代码,其中main是主要数据,int main(int argc, char** argv) { u_char data[] = { 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x11, 0xf, 0xf, 0xf, 0xf, 0xf, 0x10, 0xf, 0xf, 0xf, 0xf, 0xe, 0x10, 0x10, 0xf, 0x10, 0xf, 0xf, 0x10, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x10, 0x10, 0xf, 0x10, 0xf, 0xe, 0xf, 0xf, 0x10, 0xf, 0xf, 0x10, 0xf, 0xf, 0xf, 0xf, 0x10, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0x10, 0xf, 0xf, 0xf, 0x10, 0xf, 0xf, 0xf, 0xf, 0xe, 0xf, 0xf, 0xf, 0xf, 0xf, 0x10, 0x10, 0xf, 0xf, 0xf, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xd3, 0xd1, 0xca, 0xc6, 0xd2, 0xd2, 0xcc, 0xc8, 0xc2, 0xd0, 0xd0, 0xca, 0xc9, 0xcb, 0xc7, 0xc3, 0xc7, 0xca, 0xce, 0xca, 0xc9, 0xc2, 0xc8, 0xc2, 0xbe, 0xc2, 0xc0, 0xb8, 0xc4, 0xbd, 0xc5, 0xc9, 0xbc, 0xbf, 0xbc, 0xb5, 0xb6, 0xc1, 0xbe, 0xb7, 0xb9, 0xc8, 0xb9, 0xb2, 0xb2, 0xba, 0xb4, 0xb4, 0xb7, 0xad, 0xb2, 0xb6, 0xab, 0xb7, 0xaf, 0xa7, 0xa8, 0xa5, 0xaa, 0xb0, 0xa3, 0xae, 0xa9, 0xa0, 0xa6, 0xa5, 0xa8, 0x9f, 0xa0, 0x9e, 0x94, 0x9f, 0xa3, 0x9d, 0x9f, 0x9c, 0x9e, 0x99, 0x9a, 0x97, 0x4, 0x5, 0x4, 0x5, 0x4, 0x4, 0x5, 0x5, 0x5, 0x4, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x4, 0x4, 0x4, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x4, 0x4, 0x4, 0x5, 0x5, 0x5, 0x4, 0x4, 0x5, 0x5, 0x5, 0x5, 0x4, 0x5, 0x5, 0x4, 0x4, 0x6, 0x4, 0x4, 0x6, 0x5, 0x4, 0x5, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xe0, 0xf0, 0xe0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xe0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0 }; size_t cols = 80; // Normal std::cout << "Computing with normal way" << std::endl; std::vector<double> info; double tstart_normal = timestamp(); getData(data, cols, info); double time_normal = timestamp() - tstart_normal; // AVX2 std::cout << "Computing with avx" << std::endl; std::vector<double> info_avx2; double tstart_avx2 = timestamp(); getDataAVX2(data, cols, info_avx2); double time_avx2 = timestamp() - tstart_avx2; // Display difference std::cout << "Time normal: " << time_normal << " s" << std::endl; std::cout << "Time AVX2: " << time_avx2 << " s" << std::endl; std::cout << "Time improvement AVX2: " << time_normal / time_avx2 << std::endl; // Write to file std::ofstream file; file.open("out.csv"); for (size_t i = 0; i < cols; i++) { file << info[size_t(i)] << "," << info_avx2[size_t(i)]; file << std::endl; } file.close(); // Exit return 0; } 中的Age *必须添加到maindata中,同时仅过滤ID中存在的ID *子数据具有ID,名称和年龄的数据框。最后的数据帧命名为subdata

示例代码:

maindata

*示例中的标题名称

1 个答案:

答案 0 :(得分:0)

您可以基于inner_join在两个数据集之间进行ID

library(dplyr)
inner_join(maindata, subdata)

Joining, by = "ID"
   ID Name Age
1  1    a  26
2  2    b  55
3  3    c  34
4  6    f  33
5  7    g  21
相关问题