三天';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>