R语言报错:level sets of factors are different 问题求助
问题:因子水平不一致导致逻辑比较报错
问题场景
处理2020年NBA投篮数据做逻辑回归练习时,尝试通过以下代码新增一列判断投篮是否来自主场球队:
df$home.advntg <- df$Team == df$Home
持续报错:
Error in Ops.factor(df$Team, df$Home) : level sets of factors are different
数据背景
原数据集为1997-2020年NBA投篮位置数据,筛选2020年数据的代码如下:
df0 <- read_csv("NBA Shot Locations 1997 - 2020.csv") df0$Year <- substr(df0$"Game Date",1,4) df <- filter(df0, Year == 2020) df <- df[,-23]
用str()检查列信息:
str(df$Team)返回:Factor w/ 30 levels "ATL","BKN","BOS",..: 7 16 27 3 24 1 10 8 12 12 ...str(df$Home)返回:Factor w/ 30 levels "ATL","BKN","BOS",..: 7 20 27 5 28 1 10 8 1 12 ...
原数据集的Team和Home列均为36个因子水平,执行比较无报错。
关键概念解释:str()返回的数字含义
str()输出中,因子后面的数字是R对因子的内部编码:每个球队名称对应一个唯一数字(比如"ATL"对应1,"BKN"对应2,依此类推),后面的数字序列是该列每行数据对应的球队编码。
解决方案
方法1:转为字符型后比较(最直接)
跳过因子水平限制,直接比较字符串内容:
df$home.advntg <- as.character(df$Team) == as.character(df$Home)
方法2:统一因子水平集(保留因子类型)
提取两个列的所有唯一水平,重新设置因子水平后再比较:
# 获取所有唯一球队水平 all_teams <- union(levels(df$Team), levels(df$Home)) # 重新设置因子水平 df$Team <- factor(df$Team, levels = all_teams) df$Home <- factor(df$Home, levels = all_teams) # 执行比较 df$home.advntg <- df$Team == df$Home
方法3:读取数据时禁用自动转因子
如果后续分析不需要因子类型,读取数据时直接将Team和Home设为字符型:
df0 <- read_csv("NBA Shot Locations 1997 - 2020.csv", col_types = cols(Team = col_character(), Home = col_character()))
后续筛选后可直接执行比较操作。
内容的提问来源于stack exchange,提问作者Rachel B
相关产品推荐
相关产品推荐

