如何删除R中的空列?
我有一个CSV文件如何删除R中的空列?,r,csv,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,4
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
加载数据文件,不包括标题行:
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)
注意,如果已将其另存为文件,则完整代码应为:
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))
mydf导入数据后(使用另一位回答者建议的方法),运行此命令,用mydf
替换您决定调用数据帧的内容:
#Remove empty columns
mydf <- Filter(function(x)!all(is.na(x)), mydf)
#删除空列
mydf将空细胞转化为NA,然后移除NAs
mydata[mydata == ""] <- NA
mydata<- mydata[,colSums(is.na(mydata)) < <a desired filter value>]
mydata[mydata==“”]如果我们像您在本例中那样有有限的列,下面将是一个巧妙的解决方法
myDF<-myDF[,c(1,2,3,4,5)]
myDF只保留那些名称不为空的列怎么样
> mydf <- mydf[,names(mydf)!=""]
>mydf更复杂的删除逻辑如下:
mydf <- Filter(function(x)!all(is.na(x) || is.null(x) || x == "" || x == 0), mydf)
mydf从
使用来自Thomas post的输入:
> 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
我已经编辑了我的问题,现在标题中也有相同数量的逗号,所以基本上它被解读为16 col而不是5 col,如何解决这个问题,谢谢你的帮助。
> 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