r语言 - 按行选择特定/所有列

  • 本文关键字:选择 r语言 行选 r dplyr
  • 更新时间 :
  • 英文 :


我有以下表格:

<表类> col1 col2 col3 col4 tbody><<tr>12145663

一个dplyr方法:

library(dplyr)
df %>% 
rowwise() %>% 
mutate(max_val = max(across(everything())),
repetition = sum(across(col1:col4) == max_val))
# A tibble: 2 × 6
# Rowwise: 
col1  col2  col3  col4 max_val repetition
<int> <int> <int> <int>   <int>      <int>
1     1     2     1     4       4          1
2     5     6     6     3       6          2

基于R的方法:

df$max_val <- apply(df,1,max)
df$repetition <- rowSums(df[, 1:4] == df[, 5])

对于其他(非tidyverse)读者,基本R方法可以是:

df$max_val  <- apply(df, 1, max)
df$repetition <- apply(df, 1, function(x) sum(x[1:4] == x[5]))

输出:

#   col1 col2 col3 col4 max_val repetition
# 1    1    2    1    4       4          1
# 2    5    6    6    3       6          2

尽管dplyr已经添加了许多跨行处理数据的工具,但至少在我看来,坚持整洁的原则并始终将数据转换为"长"数据要容易得多。这些操作的格式

因此,这里有一个整洁的方法:

df %>%
mutate(row = row_number()) %>%
pivot_longer(cols = -row) %>%
group_by(row) %>%
mutate(max_val = max(value), repetitions = sum(value == max(value))) %>%
pivot_wider(id_cols = c(row, max_val, repetitions)) %>%
select(col1:col4, max_val, repetitions)

最后一个select()只是为了按照您想要的顺序获得列。

最新更新