R语言板球分析CSV读取时dplyr::select_函数报错求助
解决dplyr::select_()调用时的列选择错误
嘿,我来帮你搞定这个R语言的小问题!
首先得搞清楚你出错的原因:你用dplyr::select_()的时候,传入的T1$Runs.Scored是这一列的实际数值向量,但select_()(以及现代的select())函数需要的是列名(字符串)或者列的位置索引(整数),它把你传入的数值当成列索引来解析,自然就会抛出“Each argument must yield either positive or negative integers”的错误——毕竟你那列的得分数据不可能都是有效的列索引嘛!
而T1$Runs.Scored能正常工作,是因为$操作符的作用就是直接提取数据框某一列的向量值,和select系列函数“选择数据框的列(返回子数据框)”的用途完全不同。
接下来给你几个正确的解决方案:
方案1:使用select_()的正确写法(不推荐,因为该函数已被弃用)
如果你暂时还想用旧的select_(),需要传入列名的字符串或者列的位置:
- 传入列名字符串:
dplyr::select_(T1, "Runs.Scored") - 传入列的位置索引(假设
Runs.Scored是第3列):dplyr::select_(T1, 3)
方案2:使用dplyr现代语法(推荐)
现在dplyr已经不推荐使用带下划线的select_()这类旧版NSE函数了,更建议用标准的select(),写法更直观:
- 直接写列名(最常用):
dplyr::select(T1, Runs.Scored) - 如果你的列名存在变量里,用
{{}}来引用:target_col <- "Runs.Scored" dplyr::select(T1, {{target_col}}) - 或者用
all_of()来精准匹配字符串列名:dplyr::select(T1, all_of("Runs.Scored"))
运行这些正确的代码后,你会得到一个只包含Runs.Scored列的子数据框,和T1$Runs.Scored返回的向量不同,但这是select函数的预期行为——它用来筛选数据框的列,而不是提取向量。
内容的提问来源于stack exchange,提问作者Udayasoorian CN
相关产品推荐
相关产品推荐

