楼主: Danfeng-Li
2243 9

[问答] R问题请教:关于用which截取日期中,出现的逻辑判断问题,程序显示无法计算,很疑惑 [推广有奖]

  • 0关注
  • 0粉丝

高中生

97%

还不是VIP/贵宾

-

威望
0
论坛币
10 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
991 点
帖子
39
精华
0
在线时间
18 小时
注册时间
2016-5-13
最后登录
2016-11-10

楼主
Danfeng-Li 发表于 2016-5-13 10:41:23 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我编写的代码:
date<-c("10/24/08","10/28/08","10/1/08","10/12/08","05/01/09")
country<-c("US","US","UK","UK","UK")
leadership<-data.frame(date,country,stringsAsFactors=FALSE)

leadership<-transform(leadership,date<-as.Date(date))
startdate<-as.Date("2009-01-01")
enddate<-as.Date("2009-10-31")
is.numeric(leadership$date)
newdata<-leadership[which(leadership$date >= startdate &
leadership$date <= enddate),]

可是程序显示错误: 程序显示
Error in charToDate(x) :
  character string is not in a standard unambiguous format

想知道为什么会这样,怎么修改呢




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Which 无法计算 date ATE 程序

沙发
马甲1号 发表于 2016-5-13 11:29:14
你把字符型列向量date和日期型变量比较,当然比不出来。
第一行应该改成 date<-as.Date(c("10/24/08","10/28/08","10/1/08","10/12/08","05/01/09"),'%m/%d/%y')

藤椅
Danfeng-Li 发表于 2016-5-13 12:09:19
马甲1号 发表于 2016-5-13 11:29
你把字符型列向量date和日期型变量比较,当然比不出来。
第一行应该改成 date
我在后面有将该字符型变量转为日期型变量:leadership<-transform(leadership,date<-as.Date(date))

板凳
jiangbeilu 学生认证  发表于 2016-5-13 12:35:44
Danfeng-Li 发表于 2016-5-13 12:09
我在后面有将该字符型变量转为日期型变量:leadership
你这一句代码是有问题的,换成:
  1. leadership$date<-as.Date(leadership$date,'%m/%d/%y')
复制代码
leadership与date中间有个美元符号

报纸
马甲1号 发表于 2016-5-13 14:03:22
Danfeng-Li 发表于 2016-5-13 12:09
我在后面有将该字符型变量转为日期型变量:leadership
transform里面不能用<-替代=
函数args里面的x=1表示给x传值1,而x<-1本身是一个R的expression对象,不具有参数传递的意义(事实上x<-1被当成一个未命名参数传给了transform,然后估计被transform忽略了)!(这个地方你用过try函数之后应该会有体会)
看看下面的运行结果:
  1. > x=iris[1:10,c('Petal.Width', 'Species')]
  2. > transform(x, var1= Petal.Width*100)
  3.    Petal.Width Species var1
  4. 1          0.2  setosa   20
  5. 2          0.2  setosa   20
  6. 3          0.2  setosa   20
  7. 4          0.2  setosa   20
  8. 5          0.2  setosa   20
  9. 6          0.4  setosa   40
  10. 7          0.3  setosa   30
  11. 8          0.2  setosa   20
  12. 9          0.2  setosa   20
  13. 10         0.1  setosa   10
  14. > transform(x, var2<- Petal.Width*100)
  15.    Petal.Width Species
  16. 1          0.2  setosa
  17. 2          0.2  setosa
  18. 3          0.2  setosa
  19. 4          0.2  setosa
  20. 5          0.2  setosa
  21. 6          0.4  setosa
  22. 7          0.3  setosa
  23. 8          0.2  setosa
  24. 9          0.2  setosa
  25. 10         0.1  setosa
复制代码

地板
Danfeng-Li 发表于 2016-5-13 16:51:21
jiangbeilu 发表于 2016-5-13 12:35
你这一句代码是有问题的,换成:leadership与date中间有个美元符号
谢谢您的解答,但是我觉得问题不是出在这里,$符号是访问leadership中的date

7
Danfeng-Li 发表于 2016-5-13 17:14:10
马甲1号 发表于 2016-5-13 14:03
transform里面不能用
谢谢,我理解了,但是又发现新的问题:1、 1.png 这里日期显示的格式为默认格式,并非我要求的“mm/dd/yy”形式,我是否可以理解为,我要求的形式是输入格式,输出时还是按照默认的2、 2.png 可是当我将“=”改为“<-”后,显示的格式成了我要求的格式
3、 4.png 3.png 当我把要求的格式删去以后,不论输“=”还是“<-”都会显示错误

您能帮我解答么


8
Danfeng-Li 发表于 2016-5-13 17:36:49
马甲1号 发表于 2016-5-13 14:03
transform里面不能用
非常感谢您,这个问题我理解了,可是又有了几个疑惑:
1、 1.png 2.png
为什么第一个里面的输出格式是默认格式,第二个输出格式里是要求的格式呢?我编写的要求格式不是应该控制的是输入格式么
2、 3.png 4.png
当把要求格式的代码删除以后不论使用“=”还是“<-”都显示错误

不明白为什么

9
jiangbeilu 学生认证  发表于 2016-5-13 23:57:04
Danfeng-Li 发表于 2016-5-13 16:51
谢谢您的解答,但是我觉得问题不是出在这里,$符号是访问leadership中的date
改了那一句你就可要用transform了。
直接可以使用下面的程度,没有一点错误。
  1. date<-c("10/24/08","10/28/08","10/1/08","10/12/08","05/01/09")
  2. country<-c("US","US","UK","UK","UK")
  3. leadership<-data.frame(date,country,stringsAsFactors=FALSE)

  4. leadership$date<-as.Date(leadership$date,'%m/%d/%y')
  5. startdate<-as.Date("2009-01-01")
  6. enddate<-as.Date("2009-10-31")

  7. newdata<-leadership[which(leadership$date >= startdate & leadership$date <= enddate),]
  8. newdata
复制代码

完整图片.png (14.9 KB)

完整图片.png

Tomorrow is another day!

10
Danfeng-Li 发表于 2016-5-14 00:01:29 来自手机
jiangbeilu 发表于 2016-5-13 23:57
改了那一句你就可要用transform了。
直接可以使用下面的程度,没有一点错误。
好的,谢谢

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 00:59