说,我有一个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
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用dplyr添加一列来计算所有列的最大值,但这仅在所有列都是数字的情况下才有效:
df %>%
rowwise() %>%
mutate(max_score = max(.))
Run Code Online (Sandbox Code Playgroud)
忽略所有非数字列,如何实现相同的目标?
(显然,我可以A, B, C手动命名,但是假设我有一个包含很多列的“胖”数据框。)
您可以使用select_ifwith is.numeric来选择数字列,并使用do.call(pmax, ...)来计算行的最大值。pmax返回输入向量的并行最大值,因为它将向量作为单独的参数,所以我们可以使用do.call将select_ifreturn的所有列(数据帧)作为参数传递给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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1413 次 |
| 最近记录: |