簡體   English   中英

使用cross或c_across計算行計數

[英]Compute row-wise counts using across or c_across

我想問一個問題, 這個問題的靈感來自幾年前在堆棧溢出中提出的這個問題

給定數據框:input_df

  num_col_1 num_col_2 text_col_1 text_col_2
1         1         4        yes        yes
2         2         5         no        yes
3         3         6         no       <NA>

這段代碼

library(dplyr)    
df %>%
  mutate(sum_yes = rowSums(.[c("text_col_1", "text_col_2")] == "yes"))

將生產這個新的 dataframe

> output_df
  num_col_1 num_col_2 text_col_1 text_col_2 sum_yes
1         1         4        yes        yes       2
2         2         5         no        yes       1
3         3         6         no       <NA>       0

問題是,你如何對現代的 dplyr 動詞 cross 和c_across做同樣的事情

謝謝你。

1) c_across這里c_across返回一個包含由其參數指示的列的單行 tibble。

library(dplyr)

input_df %>%
  rowwise %>%
  mutate(sum = sum( c_across(starts_with("text")) == "yes", na.rm = TRUE)) %>%
  ungroup

給予:

# A tibble: 3 x 5
  num_col_1 num_col_2 text_col_1 text_col_2   sum
      <int>     <int> <chr>      <chr>      <int>
1         1         4 yes        yes            2
2         2         5 no         yes            1
3         3         6 no         <NA>           0

2)cross這給出了相同的結果。 cross 返回一個僅包含其參數指示across列的小標題。

input_df %>%
  mutate(sum = rowSums( across(starts_with("text")) == "yes", na.rm = TRUE)) 

將分數相加為是

如果有興趣將對應於 yes 值的分數求和:

3) c_across

library(dplyr)

input_df %>%
  rowwise %>%
  mutate(sum = sum( c_across(starts_with("num")) * 
    (c_across(starts_with("text")) == "yes"), na.rm = TRUE)) %>%
  ungroup

給予:

  # A tibble: 3 x 5
  num_col_1 num_col_2 text_col_1 text_col_2   sum
      <int>     <int> <chr>      <chr>      <int>
1         1         4 yes        yes            5
2         2         5 no         yes            5
3         3         6 no         <NA>           0

4)跨output同(3)。

input_df %>%
  mutate(sum = rowSums(across(starts_with("num")) * 
                 (across(starts_with("text")) == "yes"), na.rm = TRUE))

筆記

可重現形式的輸入:

Lines <- "  num_col_1 num_col_2 text_col_1 text_col_2
1         1         4        yes        yes
2         2         5         no        yes
3         3         6         no         NA"
input_df <- read.table(text = Lines)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM