我正在尝试寻找一种方法来标识数据框中具有等于0的任何条目的列。如果该特定列的值等于0,我想创建一个新的数据框而没有包含零值。另外,我想创建一个保留列和删除列的列表。
Example:
dataframe1:
Column1 Column2 Column3 Column4
.03 .05 .07 .08
.01 .09 .22 .39
0 .56 .88 .56
dataframe2:
Column1 Column2 Column3 Column4
.03 .05 .07 .08
.01 .09 .22 .39
0 .56 .88 .56
retainedColumns = 2, 3, 4
removedColumns = 1
我认为这可以在dplyr中轻松完成。 至于创建新的数据框,我尝试执行代码(保持崩溃):
dataframe2<-dataframe1[!dataframe1 %in% 0, ]
任何帮助将不胜感激。
答案 0 :(得分:4)
您可以执行以下操作。基本上,您是用colSums(df==0)
将每列中的零数相加。之前的!
排除所有零和之和不等于0的所有列。
df[!colSums(df==0)]
Column2 Column3 Column4
1 0.05 0.07 0.08
2 0.09 0.22 0.39
3 0.56 0.88 0.56
这是如何获取保留和删除的列的列表:
retainedColumns <- which(!colSums(df==0))
#Column2 Column3 Column4
# 2 3 4
removedColumns <- which(colSums(df==0) > 0)
#Column1
# 1
#A double negation (!!) would also work here:
removedColumns <- which(!!colSums(df==0))
数据
df <- read.table(text="Column1 Column2 Column3 Column4
.03 .05 .07 .08
0 .09 .22 .39
0 .56 .88 .56", header=TRUE, stringsAsFactors=FALSE)