R语言中根据数据框列值生成新列时遇空值问题求助
问题排查与解决
核心错误点
你在within()函数里给新列Z5赋值时,误用了相等判断运算符==,而不是赋值运算符(=或者<-)。==是用来做逻辑比较的,不会完成变量赋值操作,这就导致Z5列根本没有被正确生成,自然显示为空。
修正后的代码
只需要把赋值符号改成<-或者=就行,而且within()函数内部可以直接引用数据框的列名,不用额外加df$前缀(这也是这个函数的便利之处):
# 先构造你的示例数据框 df <- data.frame( Z1 = c("AB", "BA", "AB", "BA"), Z2 = c("XX", "YY", "YY", "XX"), Z3 = c("h1", "h2", "h1", "h2"), Z4 = c("h10", "h20", "h20", "h10"), stringsAsFactors = FALSE ) # 修正后的赋值代码 df <- within(df, { Z5 <- ifelse(Z3 == "h1" | Z4 == "h10", Z1, Z2) })
运行结果验证
执行完代码后打印数据框:
print(df)
会得到你预期的结果:
Z1 Z2 Z3 Z4 Z5 1 AB XX h1 h10 AB 2 BA YY h2 h20 YY 3 AB YY h1 h20 AB 4 BA XX h2 h10 BA
额外小贴士
within()函数的设计就是让你在数据框的专属环境里操作,所以直接写列名就行,不用带df$,代码会更简洁。另外R里<-和=在赋值场景下基本是等价的,选你习惯的用就好。
内容的提问来源于stack exchange,提问作者sfetan
相关产品推荐
相关产品推荐

