【问题标题】:Subsetting five or more columns with different conditions R data.table对具有不同条件的五个或更多列进行子集 R data.table
【发布时间】:2020-07-22 05:57:00
【问题描述】:

我有一个如下所示的 data.table:

 COUNTRY   GENDER     CURRENCY    INCOME_GROUP    YEAR  
 FRANCE     MAN       EURO            HIGH        2014  
 GERMANY    WOMEN     EURO            LOW         2015  
 FINLAND    MAN       EURO            LOW         2016  
 JAPAN      MAN       YEN             HIGH        2017  
 USA        WOMEN     DOLLAR          LOW         2018  

我想使用以下代码对该表进行子集化:datanew <- data[data$YEAR == "2014"& data$CURRENCY == "DOLLAR" & data$COUNTRY == FRANCE & data$INCOME_GROUP == LOW] 但每当我添加三个或更多条件时,datanew 变量始终具有“0”观察值。我的意思是我不能添加 4 个或更多条件。有没有办法解决这个问题? 感谢您的帮助。

【问题讨论】:

    标签: r data.table subset


    【解决方案1】:

    您的代码没有复制错误,运行您的代码错误是:

    Error in `[.data.frame`(data, data$YEAR == "2014" & data$CURRENCY == "DOLLAR" &  : 
    

    找不到对象“法国”

    这是因为当你应该传递一个字符向量时,你试图调用一个名为 FRANCE(和另一个名为 LOW)的变量,就像你对 "DOLLAR" 所做的那样:

    datanew <- data[data$YEAR == "2014"& data$CURRENCY == "DOLLAR" & data$COUNTRY == "FRANCE" & data$INCOME_GROUP == "LOW"]
    

    这复制了您的问题,data frame with 0 columns and 5 rows,这只是您没有满足所有条件的行 - 您没有数据的子集。您可以拥有任意数量的条件,但您需要满足这些条件的数据。以下返回一行:

    data[data$YEAR == "2014"& data$CURRENCY == "EURO" & data$COUNTRY == "FRANCE" & data$INCOME_GROUP == "HIGH"]
    

    【讨论】:

      【解决方案2】:

      我假设您想要对满足您给出的标准的行进行子集化?在这种情况下,没有任何行满足您的条件。

      如果你尝试:

      data = fread('COUNTRY   GENDER     CURRENCY    INCOME_GROUP    YEAR  
       FRANCE     MAN       EURO            HIGH        2014  
       GERMANY    WOMEN     EURO            LOW         2015  
       FINLAND    MAN       EURO            LOW         2016  
       JAPAN      MAN       YEN             HIGH        2017  
       USA        WOMEN     DOLLAR          LOW         2018  
      ')
      
      data[YEAR == "2014" & CURRENCY == "EURO" & COUNTRY == "FRANCE" & INCOME_GROUP == "HIGH"]
      

      返回:

         COUNTRY GENDER CURRENCY INCOME_GROUP YEAR
      1:  FRANCE    MAN     EURO         HIGH 2014
      

      此外,您需要在语句中将 FRANCELOW 括起来,因为它是 data.table,所以您不需要使用美元符号来标识列。

      【讨论】:

      • 非常感谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-30
      • 2011-03-04
      • 1970-01-01
      • 2021-10-04
      • 1970-01-01
      相关资源
      最近更新 更多