如何在保留非数字列的同时删除总计为0的列和行 [英] How to remove columns and rows that sum to 0 while preserving non-numeric columns

查看:92
本文介绍了如何在保留非数字列的同时删除总计为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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆