我正在尝试调用一个为表中的特定数据元素提供值的函数。
数据表(gameData)可能是:
DECIMAL
如果是NaN,我想用函数的返回来填充TeamAScore。我尝试了以下功能:
Date TeamA TeamB TeamAScore TeamBScore
1 2016-03-06 NYC HOU 67 76
2 2016-02-14 BOS SEA NaN NaN
3 2016-01-30 LAS DAL 63 74
当我运行时,我收到如下错误:
Ops.factor中的错误(teamdata $ Team,TeamA): 等级因子是不同的
它似乎是通过函数调用发送所有TeamA,而不是仅发送该行的值。
答案 0 :(得分:1)
这里的问题是TeamA和TeamB列没有您认为他们拥有的数据。 R中的因素很棘手......
让我们在这里创建两个因素来看看发生了什么:
> TeamA <- factor(c("NYC", "BOS", "LAS", "SEA"))
> TeamB <- factor(c("HOU", "LAS", "NYC", "SEA"))
> TeamA
[1] NYC BOS LAS SEA
Levels: BOS LAS NYC SEA
好的,所以TeamA有四个位置:NYC,BOS,LAS和SEA。所以我们可以将它与TeamB进行比较,看看两个向量中的任何一个槽是否相同。对?错误:
> TeamA == TeamB
Error in Ops.factor(TeamA, TeamB) : level sets of factors are different
这是你收到的同样错误!之所以会发生这种情况,因为真正存储在此向量中的是表示每个“因子级别”的数字。
> str(TeamA)
Factor w/ 4 levels "BOS","LAS","NYC",..: 3 1 2 4
> levels(TeamA)
[1] "BOS" "LAS" "NYC" "SEA"
> levels(TeamB)
[1] "HOU" "LAS" "NYC" "SEA"
因此,1代表TeamA向量中的BOS,但它代表TeamB向量中的HOU。当然他们无法比较!
如何避免在妨碍使用时使用因素?在创建data.frame时使用参数stringsAsFactors=FALSE
(使用data.frame(x, y, z, stringsAsFactors=FALSE)
或read.csv(“filename.csv”等等,stringsAsFactors = FALSE)`。