说,我有一个带有一些文本和一些数字列的数据框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
,但假设我有一个包含许多列的“胖”数据框。)
答案 0 :(得分:5)
您可以is.numeric
与do.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