R语言数据框取值异常:读取列号而非列值问题求助
问题分析与解决方案
看起来你是在R里处理数据框时踩了索引混淆的坑,我来帮你拆解清楚:
核心问题
你提到数据框里有一列叫Bitcoin,但代码里直接把Bitcoin当成了数据框对象来用二维索引(Bitcoin[1,5]、Bitcoin[1,5+i])——这就是问题根源!
Bitcoin本质是数据框中的一列,是个一维向量,向量只能用[位置]这种一维索引方式,根本不支持[行,列]的二维格式。当你强行用二维索引时,R会把第二个参数错误地解读为向量的属性索引,而非你期望的行/列位置,所以返回的是列的编号(比如i=4时的9),不是对应位置的数值。
修正方案
首先明确你的数据框名称(假设叫crypto_data,替换成你实际的变量名就行),再根据需求调整索引方式:
情况1:想获取「Bitcoin列的第(5+i)行」的值
如果目标是提取Bitcoin列中第(5+i)行的数值,代码改成这样:
# 先初始化a,比如设为0 a <- 0 for(i in 1:5) { # 用数据框$列名访问目标列,再用一维索引取对应行 a <- a + (crypto_data$Bitcoin[5] - crypto_data$Bitcoin[5 + i]) }
情况2:想获取「数据框第1行,第(5+i)列」的值(该列是Bitcoin)
如果第9列就是Bitcoin列,你要取数据框第1行、第(5+i)列的数值,代码改成:
a <- 0 for(i in 1:5) { # 用数据框[行号, 列号]的标准二维索引 a <- a + (crypto_data[1, 5] - crypto_data[1, 5 + i]) }
验证小技巧
你可以先单独测试索引是否正确,比如:
# 检查Bitcoin列第9行的值 print(crypto_data$Bitcoin[9]) # 检查数据框第1行第9列的值 print(crypto_data[1, 9])
如果这两个输出都是11400,说明索引没问题,再放进循环里就正常了。
内容的提问来源于stack exchange,提问作者ltrd
相关产品推荐
相关产品推荐

