根据R中的日期选择一行矩阵

根据R中的日期选择一行矩阵,r,function,select,R,Function,Select,我是R区的新来的。我有个小问题。我想根据日期选择一行。我写了一个函数,但它不起作用 以下是我的数据示例: Example Date A B 1 01/01/2000 0.6765442 1 2 01/01/2001 0.1374231 10 3 01/01/2002 0.6917205 0 4 01/01/2003 0.1440152 5 5 01/01/2004 0.1143759 8 6 01/01/2005 0.3379550 7 7

我是R区的新来的。我有个小问题。我想根据日期选择一行。我写了一个函数,但它不起作用

以下是我的数据示例:

 Example 
    Date A B 
  1 01/01/2000 0.6765442 1 
  2 01/01/2001 0.1374231 10 
  3 01/01/2002 0.6917205 0 
  4 01/01/2003 0.1440152 5 
  5 01/01/2004 0.1143759 8 
  6 01/01/2005 0.3379550 7 
  7 01/01/2006 0.4477631 9 
  8 01/01/2007 0.6164849 6 
  9 01/01/2008 0.1232872 8 
 10 01/01/2009 0.3511471 6 
我尝试使用以下代码:

 test=function(Data,text)  { 
         for ( i in (1:col(Data))) 
              { 
              if (Data[i,1]=="text") 
                 { L=i 
                   R1=Data[L,] 
                   return(R1)  } 
                  }  } 

您应该使用R矢量化的功能对数据进行子集划分。这里不需要使用for循环。例如:

Data[Data$Date == "01/01/2001",]
##         Date         A  B
## 2 01/01/2001 0.1374231 10
当然,您可以将其包装到函数中:

subset_by_date <-
   function(date_txt,Data)  Data[Data$Date == date_txt,]

subset\u by_date您可以使用
示例[Example$date=='01/01/2000',]
根据日期选择一行,或者您可以使用
subset
函数,该函数的读取效果略好于看起来混乱的括号<代码>子集(例如,Date=='01/01/2000')
@plafort是的,但您应该避免在函数中使用
子集
…在我的注释中建议使用函数换行符@agstudy@plafort没有坏处,我的意思是值得一提,因为OP要求使用包装器函数。也就是说,
subset
具有更好的sugar语法。@KrollDU请从您的问题中删除额外的注释。该函数假设存在一个名为
Date
的列,我们可以使用
f True进行泛化,这是一个更好的选项+1.
subset_by_date <-
   function(date_txt,Data,col="Date") {
          if (col  %in% colnames(Data))
             Data[Data[,col] == date_txt,]
   }