首页 > 解决方案 > 如何找出新的 NaN 来自哪里 - R

问题描述

Total_Time <- function(TT_column){
z <- dmy_hms(TT_column)
hr <- hour(z)
min <- minute(z)
sec <- second(z)
x <- hr*60 + min + sec/60 # No need to extract days as the maximum value is 13 hours
x
}

df$TT.Col_1 <- Total_Time(df$T.Col_1)
sum(is.na(df)) # 0
df$TT.Col_2 <- Total_Time(df$T.Col_2)
sum(is.na(df)) # 0
df$TT.Col_3 <- Total_Time(df$T.Col_3)
sum(is.na(df)) # 0
df$TT.Col_4 <- Total_Time(df$T.Col_4)
sum(is.na(df)) # 0
df$TT.Col_5 <- Total_Time(df$T.Col_5)
sum(is.na(df)) # 5
df$TT.Col_6 <- Total_Time(df$T.Col_6)
sum(is.na(df)) # 7

我试图找出这些 NaN 值的来源,tryCatch()但我无法找出tryCatch()与这些特定列(TT.Col_5TT.Col_6)一起使用的方法。

一些上下文:T.Col_X是字符时间值 ( dd/mm/yyyy hh:mm:ss),它们在30/12/1899 00:00:000 小时、0 分钟和 0 秒后开始转换为分钟。Total_Time是转换这些值并将它们恢复为的函数TT.Col_X

标签: rdatetimetimernan

解决方案


我找到了解决方案。我发现它在 NaN 来自的代码行中应用了没有函数的转换,例如:

代替:

df$TT.Col_5 <- Total_Time(df$T.Col_5)

我做了:

z <- dmy_hms(df$T.Col_5) # Here was the problem
hr <- hour(z)
min <- minute(z)
sec <- second(z)
df$TT.Col_5 <- hr*60 + min + sec/60

问题是什么?我发现了 5 个空的非 NaN 值。相同df$Col_6,但有 7 个非 NaN 值。


推荐阅读