R:删除其他行后,行填充NA

时间:2018-04-06 20:14:28

标签: r subset

我甚至无法弄清楚这里发生了什么,除了在删除一些行后,填充了NA的行被添加到我的数据中。所以,我只是想完成我的工作。

1。为了速度目的,我使用data.table :: fread导入一个大的csv文件:

mdata = data.table::fread("~/data.csv")

2。我不喜欢使用data.tables(亵渎,我知道),所以我将mdata转换为data.frame:

class(mdata) = "data.frame"

3。我将clusterID列转换为系数:

mdata$cluster_ID = as.factor(mdata$cluster_ID)

4。对于这个问题,我检查clusterID

plyr::count(mdata$cluster_ID)

       x freq

1      1 6100
2      2 1484
3      3 1925

...

38    29 3868

和行数:

original_n = nrow(mdata)
original_n
[1] 99412

5。多个文本列的单元格应为NA,但只是空文本(例如,它们就像x = ""而不是此x = NA)。所以我将它们转换为NA s:

mdata[mdata==""] = NA

到目前为止一切顺利。

6。我将从需要从分析中排除的数据中删除行:

mdata = mdata[mdata$var1 != "this",]  #should remove 218 rows

nrow(mdata)
[1] 99194
original_n - nrow(mdata)
[1] 218

因此它删除了正确的行数。好。

但是,当我查看clusterID列时,有174 NA个用户无法使用,当您查看clusterID 3时,您会看到它已减少224(超过我删除的行数)。

plyr::count(mdata$cluster_ID)

       x freq

1      1 6083
2      2 1484
3      3 1701

...

38    29 3868
39  <NA>  174

我尝试了什么

我尝试过使用其他导入方法(readr:read_csv;基础read.csv;在Excel中打开,保存为.xlsx,使用readxl::read_excel导入),但没有工作

我检查了NA行的样子,他们只是一堆NA s:

temp = mdata[is.na(mdata$cluster_ID), ]
mean(!is.na(temp))
[1] 0

据我所知,当我删除带有NA的行时,不知怎的,一堆行只会更改为mdata = mdata[mdata$var1 != "this",]。我已经检查过,看起来每次都是相同的行。

出于保密原因,我无法发布数据,但是我们将非常感谢任何有助于了解这种情况的帮助。

如果它有所不同我正在运行Microsoft R Open:

Sys.info()
                                                                                          sysname 
                                                                                         "Darwin" 
                                                                                          release 
                                                                                         "17.4.0" 
                                                                                          version 
"Darwin Kernel Version 17.4.0: Sun Dec 17 09:19:54 PST 2017; root:xnu-4570.41.2~1/RELEASE_X86_64" 
                                                                        machine 
                                                                                         "x86_64" 

sessionInfo()
R version 3.4.3 (2017-11-30)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS High Sierra 10.13.3

Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] readxl_1.0.0     readr_1.1.1      RevoUtils_10.0.7

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.14        audio_0.1-5         assertthat_0.2.0    utf8_1.1.2          crayon_1.3.4       
 [6] cellranger_1.1.0    plyr_1.8.4          R6_2.2.2            magrittr_1.5        pillar_1.0.1       
[11] cli_1.0.0           rlang_0.1.6         stringi_1.1.6       rstudioapi_0.7      data.table_1.10.4-3
[16] tools_3.4.3         stringr_1.2.0       hms_0.4.0           yaml_2.1.16         compiler_3.4.3     
[21] pkgconfig_2.0.1     beepr_1.2           tibble_1.4.1     

1 个答案:

答案 0 :(得分:0)

我明白了。 mdata$var1中有NA个,所以当我mdata = mdata[mdata$var1 != "this",] mdata$var1 NA转换为NA的所有行时System.out.println("SISTEM LOGIN"); System.out.println("INSERIRE NOMEUTENTE"); Scanner scan= new Scanner(System.in); String user= scan.nextLine(); System.out.println("INSERIRE PASSWORD"); String pass= scan.nextLine(); try { boolean log = true; while(log) { //conn db Connection c = DriverManager.getConnection(url,usr,pswd); //creaz statement Statement ss = c.createStatement(); //creaz codice sql String sql = " SELECT * FROM users WHERE user'" + user + "' && password='" + pass+ "' "; ResultSet res = ss.executeQuery(sql); if(res!=null) { System.out.println("LOGIN"); log = false; } else System.out.println("LOGIN FAILE"); } } 。也许只是我,但这似乎是真正错误的方法来处理缺少选择变量时的子集。