以下是我的数据的一个子集。我正在尝试删除总和为 0 的列和行...问题是我想在结果输出中保留第 1 至 8 列。有任何想法吗?我已经尝试了好几个了。一个整洁的解决方案将是最好的。
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 相同的输出(在这种特定情况下相同,但如果实际数据中有负值则不同):
df <- df[rowSums(df[-(1:7)]) !=0,
c(1:7,7 + which(colSums(df[-(1:7)]) !=0))]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)