首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从特定行获取数据

从特定行获取数据
EN

Stack Overflow用户
提问于 2019-12-28 18:59:10
回答 3查看 70关注 0票数 1

我尝试使用以下代码从两个日期01/02/2007和02/02/2007中提取数据。

代码语言:javascript
运行
复制
exdata1 <- exdata[c(01/02/2007,02/02/2007),]

但当我查看我收到的代码时,它给了我这个。

代码语言:javascript
运行
复制
> head(exdata1)
[1] Date                  Time                  Global_active_power   Global_reactive_power Voltage               Global_intensity      Sub_metering_1       
[8] Sub_metering_2        Sub_metering_3       
<0 rows> (or 0-length row.names)

有人能告诉我出了什么问题吗?我完全迷路了。

EN

回答 3

Stack Overflow用户

发布于 2019-12-29 00:40:18

没有获得数据的原因很简单:在数据本身中指定的日期是不同的:不是01/02/200702/02/2007,而是1/2/20072/2/2007。此外,Date列也是因数列(参见str(data))。要访问系数,您可以使用引号将日期括起来:

代码语言:javascript
运行
复制
example <- data[data$Date=="1/2/2007"|data$Date=="2/2/2007",]
head(example)
          Date     Time Global_active_power Global_reactive_power Voltage Global_intensity Sub_metering_1
66637 1/2/2007 00:00:00               0.326                 0.128 243.150            1.400          0.000
66638 1/2/2007 00:01:00               0.326                 0.130 243.320            1.400          0.000
66639 1/2/2007 00:02:00               0.324                 0.132 243.510            1.400          0.000
66640 1/2/2007 00:03:00               0.324                 0.134 243.900            1.400          0.000
66641 1/2/2007 00:04:00               0.322                 0.130 243.160            1.400          0.000
66642 1/2/2007 00:05:00               0.320                 0.126 242.290            1.400          0.000
      Sub_metering_2 Sub_metering_3
66637          0.000              0
66638          0.000              0
66639          0.000              0
66640          0.000              0
66641          0.000              0
66642          0.000              0
票数 1
EN

Stack Overflow用户

发布于 2019-12-29 03:27:06

您的努力显示了对R语言如何工作的几个误解。要查看R“认为”"[“函数的i位置的向量是什么,只需在控制台中键入向量代码:

代码语言:javascript
运行
复制
c(01/02/2007,02/02/2007)
[1] 0.0002491281 0.0004982561

所以您实际上是在提交一个包含接近于零的小数的数字向量。您可以使用数字向量进行选择,但它们必须是大于1的整数。即使您确实了解R不会将这些日期用作日期并尝试将其格式化为R "Date"-classed值,您仍然无法仅将这些日期用作索引,因为R日期实际上是表示自1970年1月1日以来的天数的整数,而这些日期将采用非常大的值(13545和13546):

代码语言:javascript
运行
复制
dput( as.Date(c("01/02/2007","02/02/2007"), format="%d/%m/%Y") )
# structure(c(13545, 13546), class = "Date")

mydf = data.frame( d=as.Date( c("01/02/2007","02/02/2007"), format="%d/%m/%Y") , letters[1:2] )
mydf
#------------
           d letters.1.2.
1 2007-02-01            a
2 2007-02-02            b

mydf[ as.Date( c("01/02/2007","02/02/2007"), format="%d/%m/%Y") , ]
#----------------
        d letters.1.2.
NA   <NA>         <NA>
NA.1 <NA>         <NA>

所以你最后一个评论/问题的答案是:你称之为“日期”的那些表达式从一开始就不是日期;它们只是由斜杠分隔的数字,这些数字一起被R计算为算术表达式,即由除法运算符分隔的数字。尽管转换为"Date"-class会给出一组整数,但R解释器不会以您期望的方式处理它们。您需要一种将日期与日期进行匹配的机制。%in%中缀运算符实际上是R函数match的一个伪装版本。%in%函数实际上是在构建一个可用于选择匹配行的逻辑向量:

代码语言:javascript
运行
复制
 mydf$d %in% as.Date( c("01/02/2007","02/02/2007"), format="%d/%m/%Y") 
[1] TRUE TRUE

 mydf[ mydf$d %in% as.Date( c("01/02/2007","02/02/2007"), format="%d/%m/%Y") , ]
           d lets
1 2007-02-01    a
2 2007-02-02    b
票数 1
EN

Stack Overflow用户

发布于 2019-12-28 23:56:42

您的代码没有问题,只是没有指定要筛选的列: exdatac(01/02/2007,02/02/2007),vs exdatadate列%in% c(01/02/2007,02/02/2007),

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59510271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档