Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
三天';s gather()与NAs_R_Lubridate_Tidyr - Fatal编程技术网

三天';s gather()与NAs

三天';s gather()与NAs,r,lubridate,tidyr,R,Lubridate,Tidyr,我正在使用tidyr和lubridate将宽表转换为长表。下面的工作很好 > (df <- data.frame(hh_id = 1:2, bday_01 = ymd(20150309), bday_02 = ymd(19850911), bday_03 = ymd(19801231))) hh_id bday_01 bday_02 bday_03

我正在使用
tidyr
lubridate
将宽表转换为长表。下面的工作很好

> (df <- data.frame(hh_id = 1:2,
                   bday_01 = ymd(20150309),
                   bday_02 = ymd(19850911),
                   bday_03 = ymd(19801231)))

  hh_id    bday_01    bday_02    bday_03
1     1 2015-03-09 1985-09-11 1980-12-31
2     2 2015-03-09 1985-09-11 1980-12-31

> gather(df, person_num, bday, starts_with("bday_0"))

  hh_id  person_num        bday
1     1     bday_01  2015-03-09
2     2     bday_01  2015-03-09
3     1     bday_02  1985-09-11
4     2     bday_02  1985-09-11
5     1     bday_03  1980-12-31
6     2     bday_03  1980-12-31
>(df聚集(df,person\u num,bday,以(“bday\u 0”)开头)
hh_id person_num bday
1 1 2015-03-09年10月1日
2 2 BDU 01 2015-03-09
3 1星期二1985-09-11
4.2星期二1985-09-11
5 1 B日期03 1980-12-31
6 2 B日期03 1980-12-31
但是,当组合中有NA时,日期将转换为字符串

> (df <- data.frame(hh_id = 1:2,
                   bday_01 = ymd(20150309),
                   bday_02 = ymd(19850911),
                   bday_03 = NA))

  hh_id    bday_01    bday_02    bday_03
1     1 2015-03-09 1985-09-11         NA
2     2 2015-03-09 1985-09-11         NA

> gather(df, person_num, bday, starts_with("bday_0"))

  hh_id person_num       bday
1     1    bday_01 1425859200
2     2    bday_01 1425859200
3     1    bday_02  495244800
4     2    bday_02  495244800
5     1    bday_03         NA
6     2    bday_03         NA
Warning message:
attributes are not identical across measure variables; they will be dropped 
>(df聚集(df,person\u num,bday,以(“bday\u 0”)开头)
hh_id person_num bday
1 1 BDU 01 1425859200
2 2 BDU 01 1425859200
3 1 BDU 02 495244800
4 2 B日期02 495244800
5 1 B日03 NA
6 2 B日03 NA
警告信息:
属性在度量变量之间不相同;它们将被删除
请注意,当规则字符串与NA混合时,仍然会出现警告

> (df <- data.frame(hh_id = 1:2,
                    bday_01 = '20150309',
                    bday_02 = '19850911',
                    bday_03 = NA))

  hh_id  bday_01  bday_02 bday_03
1     1 20150309 19850911      NA
2     2 20150309 19850911      NA

> gather(df, person_num, bday, starts_with("bday_0"))

  hh_id person_num     bday
1     1    bday_01 20150309
2     2    bday_01 20150309
3     1    bday_02 19850911
4     2    bday_02 19850911
5     1    bday_03     <NA>
6     2    bday_03     <NA>
Warning message:
attributes are not identical across measure variables; they will be dropped 
>(df聚集(df,person\u num,bday,以(“bday\u 0”)开头)
hh_id person_num bday
1 1 BDU 01 20150309日
2 2 B日期01 20150309
3 1 B日期02 19850911
4 2 B日期02 19850911
5 1 B日(03)
2003年2月6日
警告信息:
属性在度量变量之间不相同;它们将被删除

在避免警告和保留格式的同时,是否可以将tidyr与NA一起使用?

数据未转换为字符串,它将返回到1970-01-01以来秒的整数表示形式,这是
df
中原始
日期
值所表示的:

x <- df$bday_01
x
#[1] "2015-03-09 UTC" "2015-03-09 UTC"
attributes(x) <- NULL
x
#[1] 1425859200 1425859200

x您可以使用基本整形吗?它没有这个问题
整形(df,idvar='hh\u id',variang=list(2:4),v.names='bday',direction='long',timevar='person\u num')
Ah好的。关于如何系统地为所有NA分配属性的想法?换句话说,如果bday_03只有一个NA,而bday_02有相反的NA怎么办?@josiekre-只有当变量中有所有NA且没有任何有效日期时,问题才应该存在。因此,没有为该变量设置正确的日期/时间属性。有一个N在bday_03和/或bday_02中的有效日期之间穿插的字符不会破坏我不认为的任何东西。它确实会因为某种原因而破坏。这就是我的一个重要示例:在lubridate列中穿插NAs。@josiekre-我无法复制该问题,例如:
(df奇怪。那
df
对我不起作用。它会删除属性并发出警告。R是3.1.2版;lubridate 1.3.3;tidyr 0.2.0
attributes(df$bday_03) <- attributes(df$bday_02)
gather(df, person_num, bday, starts_with("bday_0"))

#  hh_id person_num       bday
#1     1    bday_01 2015-03-09
#2     2    bday_01 2015-03-09
#3     1    bday_02 1985-09-11
#4     2    bday_02 1985-09-11
#5     1    bday_03       <NA>
#6     2    bday_03       <NA>