簡體   English   中英

為什么當我刪除特定行時,我的輸出全是NA?

[英]why when I remove specific rows, my output is all NA?

我有一個數據,我在這里上傳了它https://gist.github.com/anonymous/0bc36ec5f46757de7c2c

我使用以下命令將其加載到R中

df <- read.delim("path to the data", header=TRUE, sep="\t", fill=TRUE, row.names=1, stringsAsFactors=FALSE, na.strings='') 

然后我檢查一個特定的列,看看有多少+

length(which(df$Potential.contaminant == "+")) 

在此cas中顯示9。 然后我嘗試使用以下命令刪除該行中+的所有行

Newdf <- df[df$Potential.contaminant != "+", ] 

輸出為全NA。 怎么了 ?? 我在這里做什么錯?

正如@akrun所建議的那樣,我嘗試了許多不同的方法來完成此操作,但未成功

df[!grepl("[+]", df$Potential.contaminant),]
df[ is.na(df$Potential.contaminant),]
subset(df, Potential.contaminant != "+")
df[-(which(df$Potential.contaminant == "+")),] 

以上命令均無法解決。 一個想法是Potential.contaminant具有NA,這就是原因。 我用零替換了所有NA

df[c("Potential.contaminant")][is.na(df[c("Potential.contaminant")])] <- 0

但還是一樣

將要點復制粘貼到文件c:/input.txt ,然后使用您的代碼:

df <- read.delim("c:/input.txt", header=TRUE, sep="\t", fill=TRUE, row.names=1, stringsAsFactors=FALSE, na.strings='') 

現在:

> str(df)
'data.frame':   21 obs. of  11 variables:
 $ Intensityhenya         : int  0 NA NA NA NA 0 0 0 0 0 ...
 $ Only.identified.by.site: chr  "+" NA NA NA ...
 $ Reverse                : logi  NA NA NA NA NA NA ...
 $ Potential.contaminant  : chr  "+" NA NA NA ...
 $ id                     : int  0 NA NA NA NA 1 2 3 4 5 ...
 $ IDs.1                  : chr  "16182;22925;28117;28534;28538;29309;36387;36889;42536;49151;49833;52792;54591;54592" NA NA NA ...
 $ razor                  : chr  "True;True;False;False;False;False;False;True;False;False;False;False;False;False" NA NA NA ...
 $ Mod.IDs                : chr  "16828;23798;29178;29603;29607;30404;38270;38271;38793;44633;51496;52211;55280;57146;57147;57148;57149" NA NA NA ...
 $ Evidence.IDs           : chr  "694702;694703;694704;1017531;1017532;1017533;1017534;1017535;1017536;1017537;1017538;1017539;1017540;1017541;1017542;1017543;10"| __truncated__ NA NA NA ...
 $ GHSIDs                 : chr  NA NA NA NA ...
 $ BestGSFD               : chr  NA NA NA NA ...

如果我嘗試子集:

> df2 <- df[is.na(df$Potential.contaminant),]
> str(df2)
'data.frame':   12 obs. of  11 variables:
 $ Intensityhenya         : int  NA NA NA NA NA NA NA NA NA NA ...
 $ Only.identified.by.site: chr  NA NA NA NA ...
 $ Reverse                : logi  NA NA NA NA NA NA ...
 $ Potential.contaminant  : chr  NA NA NA NA ...
 $ id                     : int  NA NA NA NA NA NA NA NA NA NA ...
 $ IDs.1                  : chr  NA NA NA NA ...
 $ razor                  : chr  NA NA NA NA ...
 $ Mod.IDs                : chr  NA NA NA NA ...
 $ Evidence.IDs           : chr  NA NA NA NA ...
 $ GHSIDs                 : chr  NA NA NA NA ...
 $ BestGSFD               : chr  NA NA NA NA ...

但是您的數據如此瘋狂,幾乎不可能將其可視化,因此讓我們嘗試其他方法來一目了然。

> colnames(df)
 [1] "Intensityhenya"          "Only.identified.by.site" "Reverse"                 "Potential.contaminant"   "id"                      "IDs.1"                   "razor"                   "Mod.IDs"                
 [9] "Evidence.IDs"            "GHSIDs"                  "BestGSFD"  

您的標頭很麻煩,讓我們看一下:

IDs Intensityhenya  Only identified by site Reverse Potential contaminant   id  IDs razor   Mod.IDs Evidence IDs    GHSIDs  BestGSFD

伴隨着一行數據,這些數據中的長數據被切掉一眼:

CON__A2A4G1 0   +       +   0   16182;[...];4592    True;[..];False 16828;[...];57149   694702;[...];2208697;       
208698;[...];2441826                                            
3;2433194;[...];4682766                                     

我只是在可能的情況下確定了多余的數字,並保留了制表符和換行符。

我希望您了解如何以及為什么這可以導致對數據進行正確的分析,在嘗試將其重新加載到R中之前,請對輸入數據進行一些檢查以清理它們。

出於說明目的,以下是您的要點,用省略號和%T%代替制表符:

IDs%T%Intensityhenya%T%Only identified by site%T%Reverse%T%Potential contaminant%T%id%T%IDs%T%razor%T%Mod.IDs%T%Evidence IDs%T%GHSIDs%T%BestGSFD
CON__A2A4G1%T%0%T%+%T%%T%+%T%0%T%1618[...]4592%T%Tru[...]alse%T%1682[...]7149%T%69470[...]208697;%T%%T%
20869[...]441826%T%%T%%T%%T%%T%%T%%T%%T%%T%%T%%T%
[...]20%T%%T%%T%%T%%T%%T%%T%%T%%T%%T%%T%
00[...]%T%%T%%T%%T%%T%%T%%T%%T%%T%%T%%T%
1271[...]682766%T%%T%%T%%T%%T%%T%%T%%T%%T%%T%%T%
CON__A2A5Y0%T%0%T%%T%%T%+%T%1%T%443[...]5777%T%Fals[...]rue%T%464[...]8377%T%21071[...]489947%T%40503[...]780178%T%40505[...]780175
CON__A2AB72%T%0%T%%T%%T%+%T%2%T%443[...]0447%T%Tru[...]alse%T%464[...]2842%T%21070[...]232341%T%40502[...]250729%T%40502[...]250728
CON__ENSEMBL:ENSBTAP00000014147%T%0%T%%T%%T%+%T%3%T%53270%T%TRUE%T%55779%T%238286[...]382871%T%457377[...]573778%T%4573776
CON__ENSEMBL:ENSBTAP00000024146%T%0%T%%T%%T%+%T%4%T%186[...]5835%T%Tru[...]rue%T%194[...]8438%T%8382[...]492132%T%15455[...]783465%T%15455[...]783465
CON__ENSEMBL:ENSBTAP00000024466;CON__ENSEMBL:ENSBTAP00000024462%T%0%T%%T%%T%+%T%5%T%939[...]5179%T%Tru[...]rue%T%978[...]7757%T%41149[...]468480%T%78212[...]739209%T%78217[...]739209
CON__ENSEMBL:ENSBTAP00000025008%T%0%T%+%T%%T%+%T%6%T%1564[...]8580%T%Fals[...]alse%T%1627[...]9651%T%66672[...]269215%T%125151[...]439696%T%125151[...]439691
CON__ENSEMBL:ENSBTAP00000038253%T%0%T%%T%%T%+%T%7%T%120[...]5703%T%Fals[...]alse%T%125[...]8300%T%5326[...]25602%T%%T%
;125602[...]178%T%%T%%T%%T%%T%%T%%T%%T%%T%%T%%T%
1[...]483384%T%%T%%T%%T%%T%%T%%T%%T%%T%%T%%T%
22838[...]23247%T%%T%%T%%T%%T%%T%%T%%T%%T%%T%%T%
;123247[...]411%T%%T%%T%%T%%T%%T%%T%%T%%T%%T%%T%
4[...]7%T%%T%%T%%T%%T%%T%%T%%T%%T%%T%%T%
603[...]790126;%T%%T%%T%%T%%T%%T%%T%%T%%T%%T%%T%
79012[...]13848%T%%T%%T%%T%%T%%T%%T%%T%%T%%T%%T%
;413848[...]765024%T%%T%%T%%T%%T%%T%%T%%T%%T%%T%%T%
sp|O43790|KRT86_HUMAN;CON__O43790%T%0%T%%T%%T%+%T%8%T%121[...]5716%T%Tru[...]rue%T%126[...]8315%T%5455[...]484318%T%10404[...]426334%T%

似乎未標記為污染物的數據行沒有任何值。 “ NA”是由於在read.delim函數調用期間使用了“ na.strings =”“。 因此,例如,如果您這樣做:

df <- read.delim("https://gist.githubusercontent.com/anonymous/0bc36ec5f46757de7c2c/raw/517ef70ab6a68e600f57308e045c2b4669a7abfc/example.txt", header=TRUE, row.names=1, sep="\t")
df<-df[df$Potential.contaminant!='+',] 
summary(df)

您應該看到空單元格。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM