在R中使用多个标准进行子集

时间:2017-02-03 19:33:13

标签: r subset

我有一个数据集如下(data.frame格式):

>dataset
X Y Z Value
a c f 12
a d f 45
a c f 654
a d g 684
a c g 54
b d f 78
b c f 31
b d f 777
b c g 54 
b d g 45

我有第二个带有标准的data.frame:

>criteria
X Y Z 
a c f 
b d f 

如何将第二个矩阵应用于第一个矩阵,在此示例中为c(654,12,777,68)?我尝试过的大多数事情最终都是用三个变量中的任何一个来匹配而不是全部三个变量。

编辑:修正了结果应该是什么

3 个答案:

答案 0 :(得分:3)

只需使用merge(df1, df2)

merge(df1, df2)[,'Value']

如果你只想要矢量:

df1 <- read.table(text = 
'X Y Z Value
a c f 12
a d f 45
a c f 654
a d g 684
a c g 54
b d f 78
b c f 31
b d f 777
b c g 54 
b d g 45', h = T)

df2 <- read.table(text = '
X Y Z 
a c f 
b d f', h = T)

数据:

namespace UnitTestProject1
{
  [TestClass]
  public class UnitTest1
  {
    [TestMethod]
    public void TestMethod1()
    {
      Assert.IsTrue(1 == 2);
    }
  }
}

答案 1 :(得分:0)

在y逻辑上添加一些点:

do.call(paste0, criteria)
# [1] "acf" "bdf"
do.call(paste0, dataset[1:3])
# [1] "acf" "adf" "acf" "adg" "acg" "bdf" "bcf" "bdf" "bcg" "bdg"
v = do.call(paste0, dataset[1:3]) %in% do.call(paste0, criteria)
# [1]  TRUE FALSE  TRUE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE

现在,此逻辑向量用于对“值”列进行子集

dataset$Value[v]
# [1]  12 654  78 777

答案 2 :(得分:0)

我们可以使用tidyverse

library(tidyverse)
inner_join(df1, df2) %>%
             select(Value)