问题是我要构建一些表,而一些值低于特定阈值。例如:
S1 S2 S3
A 700 367 751
B 354 103 143
C 18 7 6
D 27 11 5
E 3 6 1
F 8 2 9
G 1 3 2
我希望保留值包含至少一个值等于或大于 10 的行,并合并值小于 10 的行以创建名为 "Other (<10)" 的行:
1 - 表格的一部分,其行至少有一个单元格包含一个大于 10 的值(C 行;值 18):
S1 S2 S3
A 700 367 751
B 354 103 143
C 18 7 6
2 - 任何值大于 10 的表格部分。
E 3 6 1
F 8 2 9
G 1 3 2
最终表格的最后一行是 E、F 和 G 列的总和,包括“Other(>10)”行名称。像这样:
S1 S2 S3
A 700 367 751
B 354 103 143
C 18 7 6
D 27 11 5
Other(<10) 12 11 12
请您参考如下方法:
如果您对 R 解决方案感兴趣:
filtered.df <- rbind( df[ apply(df, 1, function(x){any(x>=10)}), ],
colSums( df[ apply(df, 1, function(x){all(x< 10)}), ]))
这将是输出:
> filtered.df
# [,1] [,2] [,3]
# [1,] 700 367 751
# [2,] 354 103 143
# [3,] 18 7 6
# [4,] 27 11 5
# [5,] 12 11 12
数据:
df <- structure(c(700, 354, 18, 27, 3, 8, 1, 367, 103, 7, 11, 6, 2, 3, 751, 143, 6, 5, 1, 9, 2), .Dim = c(7L, 3L))
更新:包括列名和行名:
正如 OP 所要求的,对于列名和行名,这将是数据:
df <- structure(c(700, 354, 18, 27, 3, 8, 1, 367, 103, 7, 11, 6, 2, 3, 751, 143, 6, 5, 1, 9, 2), .Dim = c(7L, 3L), .Dimnames = list( c("A", "B", "C", "D", "E", "F", "G"), c("s1", "s2", "s3")))
然后使用上面相同的解决方案我们将得到:
> filtered.df
# s1 s2 s3
# A 700 367 751
# B 354 103 143
# C 18 7 6
# D 27 11 5
# 12 11 12
