R mean()表示数值和完整数据上的NA错误
样本数据R mean()表示数值和完整数据上的NA错误,r,R,样本数据 set.seed(123) library(dplyr) Sessions <- ceiling(rnorm(50, mean = 3000, sd = 300)) Registrations <- ceiling(rnorm(50, mean = 800, sd = 100)) Conversions <- ceiling(rnorm(50, mean = 400, sd = 50)) Date_Range = seq(Sys.Date() - 50, Sys.Da
set.seed(123)
library(dplyr)
Sessions <- ceiling(rnorm(50, mean = 3000, sd = 300))
Registrations <- ceiling(rnorm(50, mean = 800, sd = 100))
Conversions <- ceiling(rnorm(50, mean = 400, sd = 50))
Date_Range = seq(Sys.Date() - 50, Sys.Date() - 1, by = 1)
sample_data <- data.frame(Date_Range,Sessions, Registrations, Conversions)
sample_data <- tbl_df(sample_data)
到目前为止还不错
但是:
这是一组完整的数字数据,甚至不必使用na.rm=TRUE(我确实尝试过,添加了na.rm+T,这一点从来没有改变过)
看
及
因此,如果我有完整的数字数据,为什么会出现此错误?我该怎么办?问题是
意味着在数据帧上不起作用。错误与以下内容相同:
mean(data.frame(A = 1:3))
[1] NA
Warning message:
In mean.default(data.frame(A = 1:3)) :
argument is not numeric or logical: returning NA
dplyr
select返回数据帧,但未为数据帧定义mean
,来自?mean
,以下是关于参数x的内容:
一个R对象。目前有用于数字/逻辑向量的方法
和日期、日期时间和时间间隔对象。复向量是
仅允许修剪=0
同样的原因sum
也可以,因为:
sum(data.frame(A = 1:3))
[1] 6
工作。(这里的行为似乎不一致。)
如果您希望函数同时适用于sum
和mean
,更好的方法可能是从函数返回向量:
dataByDates <- function(startDate, endDate, metric) {
filter(sample_data, Date_Range >= startDate & Date_Range <= endDate) %>% select_(metric)
}
dataByDates <- function(startDate, endDate, metric) {
filter(sample_data, Date_Range >= startDate & Date_Range <= endDate)[[metric]]
}
我们可以提取列并获得平均值
aggByDates(Sys.Date()-10, Sys.Date()-1, metric = "Sessions") %>%
.$Sessions %>%
mean
#[1] 2997.9
(再次)谢谢你。已经被接受的答案在$metric部分是动态的,这也是可取的
mean(data.frame(A = 1:3))
[1] NA
Warning message:
In mean.default(data.frame(A = 1:3)) :
argument is not numeric or logical: returning NA
sum(data.frame(A = 1:3))
[1] 6
dataByDates <- function(startDate, endDate, metric) {
filter(sample_data, Date_Range >= startDate & Date_Range <= endDate)[[metric]]
}
sum(dataByDates(Sys.Date()-10, Sys.Date()-1, metric = "Sessions"))
[1] 29979
mean(dataByDates(Sys.Date()-10, Sys.Date()-1, metric = "Sessions"))
[1] 2997.9
aggByDates(Sys.Date()-10, Sys.Date()-1, metric = "Sessions") %>%
.$Sessions %>%
mean
#[1] 2997.9