dplyr的数字列的总和

时间:2017-12-04 19:02:21

标签: r dplyr

说,我有一个带有一些文本和一些数字列的数据框df

species            | short | A    | B    | C 
-------------------+-------+------+------+-----
Homo sapiens       | hsa   | 0.1  | 0.2  | 0.7
Mus musculus       | mmu   | 0.3  | 0.7  | 0.0
Rattus norvegicus  | rno   | 0.0  | 1.0  | 0.0

我知道我可以使用dplyr添加一个计算所有列最大值的列,但只有当所有列都是数字时才有效:

df %>%
    rowwise() %>% 
    mutate(max_score = max(.))

如何实现相同目的,忽略所有非数字列?

(显然,我可以手动命名A, B, C,但假设我有一个包含许多列的“胖”数据框。)

1 个答案:

答案 0 :(得分:5)

您可以is.numericdo.call(pmax, ...)一起使用来选择数字列,并使用pmax计算行数最大值; do.call返回输入向量的并行最大值,因为它将向量作为单独的参数,我们可以使用select_if传递pmax返回的所有列(数据框)作为df %>% mutate(max_score = do.call(pmax, select_if(., is.numeric))) # species short A B C max_score #1 Homo sapiens hsa 0.1 0.2 0.7 0.7 #2 Mus musculus mmu 0.3 0.7 0.0 0.7 #3 Rattus norvegicus rno 0.0 1.0 0.0 1.0 的参数:

.sh