【问题标题】:R) how to remove "rows" with empty values?R)如何删除具有空值的“行”?
【发布时间】:2014-07-24 21:56:50
【问题描述】:

我有一个奇怪的数据,其中包含很多空值。

test=read.table("test.csv", sep=",", header=T)
class(test)
[1] "data.frame"
test[1:5]
     GO.0000075 GO.0000077 GO.0000082 GO.0002474 GO.0002478
1       CDC27      FEM1B       CUL2       CTSS      AP2A2
2       FEM1B      PSMA1      PSMA1      ITGAV       CTSS
3        NAE1      PSMA3      PSMA3      PSMA1     DYNLL1
4       PSMA1      PSMB5      PSMB5      PSMA3      ITGAV
5       PSMA3      PSMC1      PSMC1      PSMB5      KIF5A
6       PSMB5      PSMC5      PSMC5      PSMC1     KIFAP3
7       PSMC1      PSMC6      PSMC6      PSMC5      PSMA1
8       PSMC5      PSMD1      PSMD1      PSMC6      PSMA3
9       PSMC6     PSMD12     PSMD12      PSMD1      PSMB5
10      PSMD1     PSMD13     PSMD13     PSMD12      PSMC1
11     PSMD12     PSMD14     PSMD14     PSMD13      PSMC5
12     PSMD13      PSMD4      PSMD4     PSMD14      PSMC6
13     PSMD14      PSME3      PSME3      PSMD4      PSMD1
14      PSMD4     PTPN11                 PSME3     PSMD12
15      PSME3                                      PSMD13
16     PTPN11                                      PSMD14
17                                                  PSMD4
18                                                  PSME3
19                                                       
20                                                       
21                                                       
22                                                       
23                                                       
24                                                       
25                                                       
26                                                       
27                                                       
28                                                       
29                                                       
30                                                       
31                                                       
32                                                       
33                                                       
34         
nrow(test[1])
[1] 34

## I want to get the number of column with any value: that is,16     
## So, I tried to remove empty columns like this

test2<-test[-which(is.na(test)),]
test2
[1] GO.0000075 GO.0000077 GO.0000082 GO.0002474 GO.0002478 GO.0002479 GO.0006006 GO.0006007   ...
## another way..
test[test==""] <- NA
test
GO.0000075 GO.0000077 GO.0000082 GO.0002474 GO.0002478 GO.0002479 GO.0006006 GO.0006007
1       CDC27      FEM1B       CUL2       CTSS      AP2A2      ITGAV      ALDOA          ALDOA
2       FEM1B      PSMA1      PSMA1      ITGAV       CTSS      PSMA1     ARPP19       ENO2
3        NAE1      PSMA3      PSMA3      PSMA1     DYNLL1      PSMA3       ENO2        GPI
4       PSMA1      PSMB5      PSMB5      PSMA3      ITGAV      PSMB5       GOT1        HK2
5       PSMA3      PSMC1      PSMC1      PSMB5      KIF5A      PSMC1       GOT2       IGF1
6       PSMB5      PSMC5      PSMC5      PSMC1     KIFAP3      PSMC5        GPI       LDHA
7       PSMC1      PSMC6      PSMC6      PSMC5      PSMA1      PSMC6        HK2       PFKP
8       PSMC5      PSMD1      PSMD1      PSMC6      PSMA3      PSMD1       IGF1      PGAM1
9       PSMC6     PSMD12     PSMD12      PSMD1      PSMB5     PSMD12       LDHA       TPI1
10      PSMD1     PSMD13     PSMD13     PSMD12      PSMC1     PSMD13       MDH1       <NA>
11     PSMD12     PSMD14     PSMD14     PSMD13      PSMC5     PSMD14       PFKP       <NA>
12     PSMD13      PSMD4      PSMD4     PSMD14      PSMC6      PSMD4      PGAM1       <NA>
13     PSMD14      PSME3      PSME3      PSMD4      PSMD1      PSME3     RANBP2       <NA>
14      PSMD4     PTPN11       <NA>      PSME3     PSMD12       <NA>       TPI1       <NA>
15      PSME3       <NA>       <NA>       <NA>     PSMD13       <NA>       <NA>       <NA>
16     PTPN11       <NA>       <NA>       <NA>     PSMD14       <NA>       <NA>       <NA>
17       <NA>       <NA>       <NA>       <NA>      PSMD4       <NA>       <NA>       <NA>
18       <NA>       <NA>       <NA>       <NA>      PSME3       <NA>       <NA>       <NA>
19       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>
20       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>
21       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>
22       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>
23       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>
24       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>
25       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>
26       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>
27       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>
28       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>
29       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>
30       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>
31       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>
32       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>
33       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>
34       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>       <NA>

test<-na.omit(test)
test
GO.0000075 GO.0000077 GO.0000082 GO.0002474 GO.0002478 GO.0002479 GO.0006006 GO.0006007
1      CDC27      FEM1B       CUL2       CTSS      AP2A2      ITGAV      ALDOA      ALDOA
2      FEM1B      PSMA1      PSMA1      ITGAV       CTSS      PSMA1     ARPP19       ENO2
3       NAE1      PSMA3      PSMA3      PSMA1     DYNLL1      PSMA3       ENO2        GPI
  GO.0006091 GO.0006094 GO.0006096 GO.0006099 GO.0006106 GO.0006119 GO.0006120 GO.0006418
1      ACACB      ALDOA      ALDOA         FH         FH       BDNF       BDNF       KARS
2      ALDOA     ARPP19       ENO2      IDH3A       GOT1     NDUFA9     NDUFA9       NARS
3     ATP5A1       ENO2        GPI       LDLR       GOT2    NDUFAF1    NDUFAF1       PPA1

我还尝试使用 complete.cases 函数排除空白并获取具有值的行数(例如 row(test[1])=16)。但它只是返回了相同的结果。

我该怎么办?

【问题讨论】:

  • 这是排除仅包含空字符串的行的一种方法:test[apply(test, 1, function(x) any(x != '')), ]
  • 我试过这个功能,但是没有用。谢谢。
  • 我必须承认我不明白这个问题,你想得到GO.0000075的专栏吗?
  • 也不确定这个问题,但有几个 cmets:尝试在使用 read.table 读取数据时将空白元素设置为缺失。像test &lt;- read.table("test.csv", sep=",", header=T, strip.white=TRUE, na.strings="") 这样的东西。然后,您可以使用 test[apply(test, 1,function(i) !all(is.na(i))), ] 删除所有缺失的行
  • 谢谢。我确实按照您的代码阅读了数据。测试

标签: r dataframe


【解决方案1】:

试试这样的

test[rowSums(is.na(test))!=ncol(test), ] # first set blank to NA

test[rowSums(test=="")!=ncol(test), ]

【讨论】:

  • 我已经尝试过您的评论,但它给了我以下错误消息:df[rowSums(is.na(test))!=ncol(test), ] df[rowSums(is. na(test)) != ncol(test), ] : 'closure' 类型的对象不是子集
  • 谢谢!但是,这些仍然不起作用。我不确定是什么问题。
  • > test1=test[rowSums(is.na(test))!=ncol(test), ] > nrow(test1) [1] 34
  • > test2=test[rowSums(test=="")!=ncol(test), ] > nrow(test2) [1] 34
  • 这些都不适用于我的情况。在我的情况下起作用的是以下一个!我使用了很多选项后的解决方案是:row_num&lt;-0 dfc&lt;-df_original for (d in 1:dim(dfc)[1]) { if (TRUE %in% names((table(is.na(dfc[2:dim(dfc)[2]][d,])))) &amp; FALSE %in% names((table(is.na(dfc[2:dim(dfc)[2]][d,]))))) {row_num[d]&lt;-d } else { row_num[d]&lt;-0} } rnum &lt;- row_num[row_num&gt;0] dfc[c(rnum),]
【解决方案2】:

当我将其读入 R 后,我有一个底部有许多空白行的 CSV 文件。

一个似乎对我有用的解决方案是选择一个我知道永远不会有任何空白的列,然后对其进行过滤:

df <- df %>% dplyr::filter(!(Item.Number==""))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 2018-04-27
    相关资源
    最近更新 更多