Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.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
R 查找列在其data.table中是否有多个类_R_Data.table_Coercion - Fatal编程技术网

R 查找列在其data.table中是否有多个类

R 查找列在其data.table中是否有多个类,r,data.table,coercion,R,Data.table,Coercion,我有一个海量的data.table,所以我无法在列中看到所有条目 我想将一个列(显然是类字符)转换为数字,但是,当我使用as.numeric(col_name)时,会收到警告“强制引入的NAs”。在我做任何其他事情之前,我想知道是否可以找出列中的哪些条目不是字符,或者是什么导致了问题 我在data.table上执行str,该表给出: Classes ‘data.table’ and 'data.frame': 57042881 obs. of 21 variables: $ V1

我有一个海量的data.table,所以我无法在列中看到所有条目

我想将一个列(显然是类字符)转换为数字,但是,当我使用as.numeric(col_name)时,会收到警告“强制引入的NAs”。在我做任何其他事情之前,我想知道是否可以找出列中的哪些条目不是字符,或者是什么导致了问题

我在data.table上执行str,该表给出:

    Classes ‘data.table’ and 'data.frame':  57042881 obs. of  21 variables:
 $ V1 : int  142466 1265 142510 199933 143297 13548 143605 15194 143894 16701 ...
 $ V2 : int  1 1 1 1 1 1 1 1 1 1 ...
 $ V3 : int  20150702 20160316 20150702 20160316 20150703 20160324 20150704 20160327 20150704 20160331 ...
 $ V4 : int  14 17 15 6 16 17 9 20 14 15 ...
 $ V5 : chr  "2015-07-02 14:50:00" "2016-03-16 17:40:00" "2015-07-02 15:58:00" "2016-03-16 06:20:00" ...
 $ V6 : int  33547 25523 33547 25523 33547 25523 33547 25523 33547 25523 ...
 $ V7 : num  42.9 33.9 53.8 65.3 35.7 ...
 $ V8 : int  2 2 2 2 2 2 2 2 2 2 ...
 $ V9 : num  60 34.5 75.3 66.5 50 ...
 $ V10: num  5.46 3.14 6.84 6.05 4.55 3.3 0.71 2.18 3.11 1.82 ...
 $ V11: chr  "1.271732" "0.926145" "1.271883" "0.926295" ...
 $ V12: num  1.4 1.02 1.4 1.02 1.4 ...
 $ V13: int  0 0 0 0 0 0 0 0 0 0 ...
 $ V14: int  0 0 0 0 0 1 0 0 0 0 ...
 $ V16: chr  "ULP" "ULP" "ULP" "ULP" ...
 $ V17: POSIXct, format: "2015-07-02 14:50:00" "2016-03-16 17:40:00" "2015-07-02 15:58:00" "2016-03-16 06:20:00" ...
 $ V18: Date, format: "2015-07-02" "2016-03-16" "2015-07-02" "2016-03-16" ...
 $ V19: int  2015 2016 2015 2016 2015 2016 2015 2016 2015 2016 ...
 $ V20: int  7 3 7 3 7 3 7 3 7 3 ...
 $ V21: int  2 16 2 16 3 24 4 27 4 31 ...
然后我想把V11转换成数字

dt_2 <- dt[, V11 := as.numeric(V11)]
Warning message:
In eval(expr, envir, enclos) : NAs introduced by coercion

dt_2由于数据集非常大,最好在新的会话中再次读取单个列(因为OP已经通过将(
:=
)列分配给自身来替换列“V11”)

library(data.table)
dt1 <- fread("yourfile.csv", select = 11)
基于“i1”对列进行子集设置

v1 <- dt1[[1]][i1]

这意味着您在“V11”中有一些非数字元素,它们通过强制转换为“NA”
numeric
。这是一个友好的警告,请检查原始数据集列中是否有更可疑的内容。您可以通过执行
i1来调查这一点。我是指在执行
之前的调查内容:=
谢谢。我运行了您的sug手势,但它没有告诉我区别在哪里,它只是显示了一大堆NAs。我是否能够看到条目在被强制为NA之前是什么?这是因为您已经用
V11:=
`转换了列,请在新会话上读取(以免弄乱内存)来尝试然后在做
:=
之前按照我之前的评论做。如果这需要太多时间,那么您仍然可以阅读
fread(“yourfile.csv”,select=11)
假设它是第11列尝试运行:
dt$V11[is.na(as.numeric(dt$V11)]
这将生成NAs,然后对失败的行进行子集。
v1 <- dt1[[1]][i1]
dt2 <- fread("yourfile.csv", na.strings = "null")