根据R中的日期选择一行矩阵
我是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
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,]
}