我需要对包含13个静态列变量的数据帧(df1)进行过滤或子集,而另一个数据帧(df2)包含与df1相同的列名但不包含相同数量的列。 Df2是用户生成的,包含用户想要过滤df1的列。所以df2可能只包含一个列名或8列。
DF1
using System;
using System.Collections.Generic;
using System.IO;
using CsvHelper;
namespace stack1
{
class Program
{
static void Main(string[] args)
{
//list of int
var result = new List<int>();
//total
int sum=0;
int recordValue;
using (TextReader fileReader = File.OpenText(@"C:\sample.csv"))
{
var csv = new CsvReader(fileReader);
csv.Configuration.HasHeaderRecord = false;
csv.Configuration.TrimFields = false;
while (csv.Read())
{
for (var i = 0; csv.TryGetField(i, out recordValue); i++)
{
result.Add(recordValue);
sum += recordValue;
}
}
}
Console.WriteLine(sum);
Console.ReadLine();
}
}
}
DF2
V1 V2 V3 V4 V5 V6
Chevy V8 4D AT PS NAV
Chevy V8 2D MT MS NONAV
结果
V3 V4 V6
4D AT NAV
我怎样才能在R中这样做?由于df2中的列名称是动态的并且总是不同的,因此子集看起来不是一个好选择。所以使用df2 $ V3不是一个选择。
提前致谢。
答案 0 :(得分:0)
我们可以left_join
library(dplyr)
left_join(df2, df1) %>%
select_(.dots = names(df1))
# V1 V2 V3 V4 V5 V6
#1 Chevy V8 4D AT PS NAV
或使用merge
base R
merge(df1, df2, all.y= TRUE)[names(df1)]
# V1 V2 V3 V4 V5 V6
#1 Chevy V8 4D AT PS NAV
答案 1 :(得分:0)
这正是semi_join
:
library(dplyr)
semi_join(df1, df2)