从R中的矩阵获得所需的行

时间:2014-10-29 23:54:31

标签: r matrix row

说我有一个矩阵。有一列显示日期信息,从第一行“20080101”到最后一行“20100101”。问题是,如何从日期“20080901”到“20091031”获取行?它在R中运行。

示例:

2008010106 a
2008010112 b
2008010118 f
2008010206 e
2008010200 w
2008010212 a
2008010218 b
2008010300 f
2008010406 e
2008010306 a
2008010312 b
2008010318 f
2008010400 r
2008010412 e

第一列是日期(最后两位数表示一天中的小时数)。第二列是所有字母。

现在我想从“2008010200”到“2008010412”获取行

注意日期不是按顺序排列的。

3 个答案:

答案 0 :(得分:2)

我喜欢这种事情的xts子集。

library(xts)
m <- cbind(date=seq(20080101, 20080131, 1),
           matrix(runif(31*2), ncol=2)) 
x <- xts(m[, -1], as.Date(as.character(m[, 1]), '%Y%m%d')) 

x['20080110/20080120']

# 2008-01-10 0.4819532 0.9406910
# 2008-01-11 0.5447225 0.5776338
# 2008-01-12 0.5614482 0.4152551
# 2008-01-13 0.2356413 0.9192496
# 2008-01-14 0.9759123 0.8141157
# 2008-01-15 0.2912074 0.3847100
# 2008-01-16 0.2185788 0.6909651
# 2008-01-17 0.6544894 0.3287306
# 2008-01-18 0.1319076 0.6527686
# 2008-01-19 0.6391880 0.5336123
# 2008-01-20 0.6915097 0.4842339

以上示例返回日期介于2008年1月10日至2008年1月20日期间的x行。

答案 1 :(得分:0)

评估第n列的逻辑表达式表示第10列可用于&#34; i&#34; "["的论据。

n=10
shorterM <- M[ M[,n] >= "20080101" & M[,n] <= "20100101" , ]

这应该适用于矩阵或数据帧,只要这些&#34;日期&#34;实际上是具有该格式的字符值。 &#34;&gt; =&#34;,&#34;&lt; =&#34; abd&#34;&amp;&#34;运算符都是矢量化的。这是&#34;逻辑索引&#34;。由于大多数受访者认为这是您的工作而且可能无法测试(因为我没有),因此您在发布没有代码的问题时会冒险。下次发布一个小例子,最好是dput函数,并指出正确答案是什么。然后你得到经过测试的代码,每个人都很开心,你没有得到密切的投票......除非当然这是一个副本,这当然是可能的。

提供的示例用作工作示例:

> DD <- read.table(text="2008010106 a
+ 2008010112 b
+ 2008010118 f
+ 2008010206 e
+ 2008010200 w
+ 2008010212 a
+ 2008010218 b
+ 2008010300 f
+ 2008010406 e
+ 2008010306 a
+ 2008010312 b
+ 2008010318 f
+ 2008010400 r
+ 2008010412 e", colClasses="character")

> (shorterDD <- DD[ DD[,1] >= "2008010200" & DD[,1] <= "2008010412" , ])
           V1 V2
4  2008010206  e
5  2008010200  w
6  2008010212  a
7  2008010218  b
8  2008010300  f
9  2008010406  e
10 2008010306  a
11 2008010312  b
12 2008010318  f
13 2008010400  r
14 2008010412  e

答案 2 :(得分:0)

您可以使用between来自dplyr的方便功能。来自@jbaums'帖子的m

  library(dplyr) 
  m[between(m[,"date"], 20080110, 20080120),]
  #       date                      
  #[1,] 20080110 0.19957458 0.22814565
  #[2,] 20080111 0.44428667 0.24073101
  #[3,] 20080112 0.86218249 0.68175459
  #[4,] 20080113 0.31706619 0.48679117
  #[5,] 20080114 0.09629562 0.66931400
  #[6,] 20080115 0.81436380 0.35013160
  #[7,] 20080116 0.34077661 0.54417985
  #[8,] 20080117 0.71414292 0.52569811
  #[9,] 20080118 0.84745961 0.90069540
 #[10,] 20080119 0.04145519 0.05394461
 #[11,] 20080120 0.65274477 0.08029292