rowwise()产生mean()和sum()的错误
我试图得到行中某些列的平均值和总和。此代码将生成数据集:rowwise()产生mean()和sum()的错误,r,dplyr,sum,mean,rowwise,R,Dplyr,Sum,Mean,Rowwise,我试图得到行中某些列的平均值和总和。此代码将生成数据集: library(tidyverse) test_data <- tibble(part_id = 1:5, a_1 = c("a", "b", "c", "d", "a"), a_2 = c("b", NA, "b", "a", "d"), a_3 = c("b", "b", "d", "d", "a
library(tidyverse)
test_data <- tibble(part_id = 1:5,
a_1 = c("a", "b", "c", "d", "a"),
a_2 = c("b", NA, "b", "a", "d"),
a_3 = c("b", "b", "d", "d", "a"))
test_data <- test_data %>%
mutate_at(vars(a_1, a_2), .funs = list(scored = ~case_when(
. == "a" | . == "b" ~ 1,
. == "c" ~ 0,
. == "d" ~ -100)))
我还尝试了这个修改,包括了c函数,就像您列出每一列一样。这导致了以下错误:
library(tidyverse)
test_data <- test_data %>%
rowwise() %>%
mutate(a_total = base::sum(c(dplyr::select(., contains("scored"))), na.rm = TRUE),
a_mean = base::mean(c(dplyr::select(., contains("scored"))), na.rm = TRUE)) %>%
ungroup()
Error in base::sum(c(dplyr::select(., contains("scored"))), na.rm = TRUE) :
invalid 'type' (list) of argument
我怎样才能和rowwise合作?为什么这种行为与典型行为以及行和或行平均值如此不同
我很欣赏你的洞察力 问题是rowwise正在按行进行分组,sum、mean等在向量上进行工作。它基本上应用于单行data.frame。通过使用unlist进行换行,它将从data.frame转换为向量
如果您想继续使用rowwise,那么这里有另一种方法,它使用{rlang}捕获要求和和和平均的变量: 图书馆弹琴 测试数据%n名称 使用'rlang',以便'dplyr'能够识别变量名 测试数据%>% 行%>% mutea_sum=sumc!!!rlang::symsvars,na.rm=TRUE, a_平均值=平均值C!!!rlang::symsvars,na.rm=TRUE%>% 解组 >一个tibble:5x8 >第二部分a_1 a_2 a_3 a_1_得分a_2_得分a_总和a_平均值 > >1 1 a b 1 2 1 >2 2 b 1 NA 1 1 >33CBD0110.5 >4 d a d-1001-99-49.5 >5ADA1-100-99-49.5
由v0.3.0于2020-04-05创建,你实际上是在将一个列表传递给sum和means,使其运行,但它只给出了总计和总计平均值,而不是每一行。你可以尝试pmap方法吗?是的,我更想知道为什么它不能与rowwise一起工作,但你上面的评论解释了为什么它不能工作。我只是很惊讶没有一个工作区@Sabree问题是unlist会删除属性,它会一直得到整个列。我们可以用do吗?rowwise无论如何都没有那么有效
library(tidyverse)
test_data <- test_data %>%
rowwise() %>%
mutate(a_total = base::sum(dplyr::select(., contains("scored")), na.rm = TRUE),
a_mean = base::mean(dplyr::select(., contains("scored")), na.rm = TRUE)) %>%
ungroup()
Warning messages:
1: In mean.default(dplyr::select(., contains("scored")), na.rm = TRUE) :
argument is not numeric or logical: returning NA
library(tidyverse)
test_data <- test_data %>%
rowwise() %>%
mutate(a_total = base::sum(c(dplyr::select(., contains("scored"))), na.rm = TRUE),
a_mean = base::mean(c(dplyr::select(., contains("scored"))), na.rm = TRUE)) %>%
ungroup()
Error in base::sum(c(dplyr::select(., contains("scored"))), na.rm = TRUE) :
invalid 'type' (list) of argument
library(dplyr)
test_data <- test_data %>%
rowwise() %>%
mutate(a_total = base::sum(unlist(dplyr::select(.,
contains("scored")), recursive = FALSE), na.rm = TRUE),
a_mean = base::mean(unlist(dplyr::select(.,
contains("scored")), recursive = FALSE), na.rm = TRUE)) %>%
ungroup()
library(purrr)
test_data %>%
mutate(a_total = pmap_dbl(select(., contains("scored")),
~ sum(c(...), na.rm = TRUE)),
a_mean = pmap_dbl(select(., contains("scored")),
~ mean(c(...), na.rm = TRUE)))