如何初始化含difftime列的tibble?遇参数缺失错误求解
解决初始化difftime类型tibble列的报错问题
你遇到的Error in as.POSIXct(time1) : argument "time1" is missing, with no default错误,本质是因为difftime()函数必须传入至少一个time1参数,直接空调用它自然会触发参数缺失的报错,所以不能用tibble(Time_diff = difftime())这种方式初始化列。
其实完全不需要先把列设为字符类型再转换,有更直接的方法可以初始化一个difftime类型的空列,或者带占位值的列:
方法1:初始化空的difftime向量
直接用difftime(numeric(0))创建一个长度为0的difftime类型对象,放到tibble里即可:
library(tibble) # 创建带空difftime列的tibble my_tibble <- tibble(Time_diff = difftime(numeric(0))) # 验证列类型 str(my_tibble) #> tibble [0 × 1] (S3: tbl_df/tbl/data.frame) #> $ Time_diff: 'difftime' num(0) -- format: ""
后续你可以直接向这个列添加符合要求的时间差数据,类型会保持一致。
方法2:初始化带NA占位的difftime列
如果需要先创建有行的tibble,用as.difftime()指定NA和单位来生成占位的difftime值:
my_tibble <- tibble(Time_diff = as.difftime(NA, units = "secs")) # 或者创建多行占位 my_tibble <- tibble(Time_diff = rep(as.difftime(NA, units = "secs"), 5))
这种方式也能确保列从一开始就是difftime类型,不需要后续转换。
关于先设字符再转换的思路
虽然先设字符列再用as.difftime()转换也能实现,但这种方式多了一步转换操作,而且如果字符格式不规范还可能触发转换错误,不如直接初始化正确类型的列更稳妥高效。
内容的提问来源于stack exchange,提问作者ayasugihada
相关产品推荐
相关产品推荐

