我有一个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
答案 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)
使用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)!=""]