【问题标题】:NaN as a result of using tapply, when calculating meansNaN 作为使用 tapply 的结果,在计算均值时
【发布时间】:2017-11-13 01:27:01
【问题描述】:

查了很多,有类似的问题,但是一件简单的事情都看不懂。我正在尝试计算不同棒球位置的平均工资。

library(Lahman)
library(tidyverse)

data("Fielding")
data(Salaries)

# First, I need to merge two datasets
merged.df <- merge(Fielding, Salaries, by = "playerID", na.rm = TRUE)
merged.df.2002 <- merged.df[merged.df$yearID.x == "2002",]

# Let's try tapply
mean.salary <- tapply(merged.df.2002$POS, merged.df.2002$salary, mean, na.rm = TRUE)
# So it gives me an error
# In mean.default(X[[i]], ...) :
#  argument is not numeric or logical: returning NA

class(merged.df.2002$POS)
class(merged.df.2002$salary)

# Very likely POS column is factor for some reason.
# Coerce them through 
merged.df.2002$POS <- as.numeric(as.character(merged.df.2002$POS))
# Warning message:
# NAs introduced by coercion 
merged.df.2002$salary <- as.numeric(as.character(merged.df.2002$salary))
#as.numeric(merged.df.2002$salary)
class(merged.df.2002$salary)

# Let's try tapply again
mean.salary <- tapply(merged.df.2002$POS, merged.df.2002$salary, mean, na.rm 
= TRUE)
mean.salary

60000   62500   63500   65000   67000   67500   68000   68750   70000   
71000   72500   77500   78000   80000   82000   82500 
NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     NaN     
NaN     NaN     NaN     NaN     NaN     NaN

有什么想法吗?非常感谢!

【问题讨论】:

  • 空集的均值是 NaN。特别是 mean(NA, na.rm=TRUE) 是 NaN。
  • 不太相关:na.rm 不是 merge 函数的参数。
  • @Hugh,非常感谢您的超快速回答,那么我在这个流程中的错误在哪里?
  • 在我的手机上,但我的方法是:na.rm 在哪里使用 mean?在这些情况下,特定组中的所有值都是 NA 吗?我是否尝试在丢弃所有元素后取集合的平均值?
  • 你不想在你的合并中na.rm;请参阅 all.xall.y 参数,您可能正在使用这些参数

标签: r tapply


【解决方案1】:

好吧,这很容易,但我搞砸了

merged.df <- merge(Fielding, Salaries) 
# So, my mistake was that I merged only by playerid.

merged.df.2002 <- merged.df[merged.df$yearID == 2002, ] 
# we pick 2002 year from the merged dataset

# use tapply for mean
merged.df.mean <- tapply(merged.df.2002$salary, merged.df.2002$POS, mean, 
na.rm = TRUE)

#      1B      2B      3B       C      OF       P      SS 
# 2543845 1400543 1547836 1787933 2659230 2150887 1979732 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-23
    • 2014-02-14
    • 2014-07-22
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    相关资源
    最近更新 更多