我想问一个受this question asked years ago here in stack overflow启发的问题
给定数据框架: 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"))将产生这种新的数据
> 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动词跨和c_across进行相同的处理?
谢谢。
发布于 2021-02-19 00:16:32
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> 02)跨,这给出了相同的结果。across只返回由其参数指示的列的tibble。
input_df %>%
mutate(sum = rowSums( across(starts_with("text")) == "yes", na.rm = TRUE)) 把分数加起来表示是
如果有兴趣将与“是”值相对应的分数相加:
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> 04)跨的输出与(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)https://stackoverflow.com/questions/66269962
复制相似问题