如何删除R中的空列?

时间:2014-02-28 20:14:23

标签: r csv

我有一个CSV文件

Identity,Number,Data,Result,Add,,,,,,,,,,,,
1,,,,4,55,,92,,,,,,,,,62,
3,,,,7,43,,12,,,,,,,,,74,
7,,,,3,58,,52,,,,,,,,,64,
0,,,,6,10,,22,,,,,,,,,96,
3,,,,8,13,,92,,,,,,,,,22,

如何删除R中的空列?

期望输出

Identity,Number,Data,Result,Add
1,4,55,92,62
3,7,43,12,74
7,3,58,52,64
0,6,10,22,96
3,8,13,92,22

7 个答案:

答案 0 :(得分:8)

导入数据后(使用其他回答者建议的方法)运行此命令,用mydf替换您决定调用数据框的内容:

#Remove empty columns
mydf <- Filter(function(x)!all(is.na(x)), mydf)

答案 1 :(得分:3)

将空单元格转换为NA,然后删除NA

mydata[mydata == ""] <- NA
mydata<- mydata[,colSums(is.na(mydata)) < <a desired filter value>]

答案 2 :(得分:2)

如果我们在这种情况下拥有有限的列,那么下面的解决方法就会很简单。

myDF<-myDF[,c(1,2,3,4,5)]

答案 3 :(得分:2)

更复杂的删除逻辑是这样的:

tei:date

答案 4 :(得分:1)

尝试remove_empty中的janitor

使用Thomas的帖子中的输入:

> mydf

  V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18
1  1 NA NA NA  4 55 NA 92 NA  NA  NA  NA  NA  NA  NA  NA  62  NA
2  3 NA NA NA  7 43 NA 12 NA  NA  NA  NA  NA  NA  NA  NA  74  NA
3  7 NA NA NA  3 58 NA 52 NA  NA  NA  NA  NA  NA  NA  NA  64  NA
4  0 NA NA NA  6 10 NA 22 NA  NA  NA  NA  NA  NA  NA  NA  96  NA
5  3 NA NA NA  8 13 NA 92 NA  NA  NA  NA  NA  NA  NA  NA  22  NA

> mydf %>% remove_empty("cols")

1  1  4 55 92  62
2  3  7 43 12  74
3  7  3 58 52  64
4  0  6 10 22  96
5  3  8 13 92  22

答案 5 :(得分:0)

加载数据文件,不包括标题行:

mydf <- 
read.csv(text='Identity,Number,Data,Result,Add
1,,,,4,55,,92,,,,,,,,,62,
3,,,,7,43,,12,,,,,,,,,74,
7,,,,3,58,,52,,,,,,,,,64,
0,,,,6,10,,22,,,,,,,,,96,
3,,,,8,13,,92,,,,,,,,,22,', header=FALSE, skip=1)

然后只加载标题行:

n <- read.csv(text='Identity,Number,Data,Result,Add', header=TRUE)

然后使用n中的名称为完整数据指定名称,不包括NA列:

setNames(mydf[,sapply(mydf, function(x) all(!is.na(x)))],names(n))

注意,如果您将其另存为文件,则完整代码应为:

mydf <- read.csv('file.csv', header=FALSE, skip=1)
n <- read.csv('file.csv', header=TRUE, nrows=1)
setNames(mydf[,sapply(mydf, function(x) all(!is.na(x)))],names(n))

答案 6 :(得分:0)

如果只保留名称不为空的列?

> mydf <- mydf[,names(mydf)!=""]