如何在保留非数字列的同时删除总计为0的列和行 [英] How to remove columns and rows that sum to 0 while preserving non-numeric columns
本文介绍了如何在保留非数字列的同时删除总计为0的列和行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
以下是我的数据的子集。我正在尝试删除总计为0的列和行...问题是我想在结果输出中保留列1至8。有任何想法吗?我已经尝试了很多。一个整洁的解决方案将是最好的。
Below is a subset of my data. I am trying to remove columns AND rows that sum to 0 ... the catch is that I want to preserve columns 1 to 8 in the resulting output. Any ideas? I've tried quite a few. A tidy solution would be best.
Site Date Mon Day Yr Szn SznYr A B C D E F G
B0001 7/29/97 7 29 1997 Summer 1997-Summer 0 0 0 0 0 0 0
B0001 7/29/97 7 29 1997 Summer 1997-Summer 0 0 1 0 0 0 0
B0001 7/29/97 7 29 1997 Summer 1997-Summer 0 0 0 3 0 0 0
B0001 7/29/97 7 29 1997 Summer 1997-Summer 0 0 0 0 0 0 10
B0002 7/28/97 7 28 1997 Summer 1997-Summer 0 0 0 0 5 0 0
B0002 7/28/97 7 28 1997 Summer 1997-Summer 0 0 0 0 0 0 0
B0002 7/28/97 7 28 1997 Summer 1997-Summer 0 0 0 0 0 6 0
B0002 7/28/97 7 28 1997 Summer 1997-Summer 0 0 0 0 0 0 0
B0002 7/28/97 7 28 1997 Summer 1997-Summer 0 0 0 0 0 0 0
B0002 7/28/97 7 28 1997 Summer 1997-Summer 0 0 0 0 0 0 8
B0002 6/28/07 6 28 2007 Summer 2007-Summer 0 3 6 1 7 0 1
推荐答案
尝试一下:
# remove rows
df <- df[rowSums(df[-(1:7)]) !=0, ]
# remove columns
df <- df[c(1:7,7 + which(colSums(df[-(1:7)]) !=0))]
# Site Date Mon Day Yr Szn SznYr B C D E F G
# 2 B0001 7/29/97 7 29 1997 Summer 1997-Summer 0 1 0 0 0 0
# 3 B0001 7/29/97 7 29 1997 Summer 1997-Summer 0 0 3 0 0 0
# 4 B0001 7/29/97 7 29 1997 Summer 1997-Summer 0 0 0 0 0 10
# 5 B0002 7/28/97 7 28 1997 Summer 1997-Summer 0 0 0 5 0 0
# 7 B0002 7/28/97 7 28 1997 Summer 1997-Summer 0 0 0 0 6 0
# 10 B0002 7/28/97 7 28 1997 Summer 1997-Summer 0 0 0 0 0 8
# 11 B0002 6/28/07 6 28 2007 Summer 2007-Summer 3 6 1 7 0 1
您可以一步执行此操作,以得到与@ dan-y相同的输出(在此特定情况下相同,但是如果实际数据中的值为负,则有所不同a):
You can do this in one step to get the same output as @dan-y (the same in this specific case, but different if you have negative values in your real data) :
df <- df[rowSums(df[-(1:7)]) !=0,
c(1:7,7 + which(colSums(df[-(1:7)]) !=0))]
这篇关于如何在保留非数字列的同时删除总计为0的列和行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文