首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一种方法可以删除数据帧中的空列,并记录每个删除列的标题?

有没有一种方法可以删除数据帧中的空列,并记录每个删除列的标题?
EN

Stack Overflow用户
提问于 2021-02-07 10:43:56
回答 2查看 24关注 0票数 1

我有一个DNA测序信息的dataframe aSNPst.df,有些点在测序过程中没有被读取。

代码语言:javascript
复制
|Vol|Sex|Ethnicity|SNP1|SNP2|SNP3|SNP4|SNP5|
|001| M | European| AA | GC |    | TT | GG |
|002| M | European| AA | CC |    | TT | GG |
|003| F | Mixed   | AT | GC |    | AT | GG |
|004| F | European| AA | GC |    | TT | GG |
|005| M | European| TT | GG |    | AT | GG |

我认为这些空白列意味着我的代码无法识别分隔符sep=""

如何从数据帧中删除列,并记录正在删除的SNP?

EN

回答 2

Stack Overflow用户

发布于 2021-02-07 10:58:01

如果数据中有空值(""),则可以使用:

代码语言:javascript
复制
result <- df[colSums(df != '') > 0]

如果您所说的空值实际上是指NA,则执行以下操作:

代码语言:javascript
复制
result <- df[colSums(!is.na(df)) > 0]

以获取已删除的列名。

代码语言:javascript
复制
removed_columns <- setdiff(names(df), names(result))
票数 1
EN

Stack Overflow用户

发布于 2021-02-07 10:56:00

代码语言:javascript
复制
allna <- sapply(dat, function(z) all(is.na(z)))
allna
#       Vol       Sex Ethnicity      SNP1      SNP2      SNP3      SNP4      SNP5 
#     FALSE     FALSE     FALSE     FALSE     FALSE      TRUE     FALSE     FALSE 
which(allna)
# SNP3 
#    6 
names(which(allna))
# [1] "SNP3"

### remove SNP3 from the original data
dat <- dat[,!allna]

如果您想查找所有的NA或空字符串(""),那么只需调整内部函数:

代码语言:javascript
复制
allna <- sapply(dat, function(z) all(is.na(z) | !nzchar(z)))

数据

代码语言:javascript
复制
structure(list(Vol = 1:5, Sex = c("M", "M", "F", "F", "M"), Ethnicity = c("European", "European", "Mixed", "European", "European"), SNP1 = c("AA", "AA", "AT", "AA", "TT"), SNP2 = c("GC", "CC", "GC", "GC", "GG"), SNP4 = c("TT", "TT", "AT", "TT", "AT"), SNP5 = c("GG", "GG", "GG", "GG", "GG")), class = "data.frame", row.names = c(NA, -5L))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66084099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档