R DataFrame索引问题。 2变成不适用

时间:2018-11-14 17:00:47

标签: r dataframe indexing

目标: 我正在尝试使用带有计数器的for循环作为数据帧的索引(按行),将值添加到数据帧。

问题: 当计数器== 2时,行索引写为NA。然后,按预期添加3等等。 1也可以。

物品: 这不是本地的,并且可以在在线R沙箱中复制。

即使此行标记为“ NA”,我也可以使用“ [2,]”来访问数据帧索引。

当计数器== 2时,我可以将此值(2)添加到行中。

示例:

/flags/<flagname>

输出:

samplez <- c("a","b","c","d")
print(samplez)

sampleStatsDF <- data.frame(
        foo              = 0,
        bar              = 0,
        stringsAsFactors = TRUE)

print(sampleStatsDF)

sampleNum <- 0

# For each sample in group...
for (sampleId in samplez) {

    sampleNum <- sampleNum + 1

    # Default stat values
    sampleStatsDF[sampleNum,]$foo <- sampleNum
    sampleStatsDF[sampleNum,]$bar <- sampleNum

    print(sampleStatsDF[sampleNum,])

}

print(sampleStatsDF)

print(sampleStatsDF[2,])

所以...为什么R不喜欢数字2作为数据帧行索引???

2 个答案:

答案 0 :(得分:0)

如果您替换:

sampleStatsDF[sampleNum,]$foo <- sampleNum
sampleStatsDF[sampleNum,]$bar <- sampleNum

具有:

sampleStatsDF <- rbind(sampleStatsDF, c(sampleNum, sampleNum))

它将产生似乎是您预期的结果:

print(sampleStatsDF)
  foo bar
1   0   0
2   1   1
3   2   2
4   3   3
5   4   4

我不太确定您所看到的问题背后的解释是什么。我的猜测可能与为尚不存在的行(特别是在单行数据帧中)设置值有关。

答案 1 :(得分:0)

这是因为您要向sampleStatsDF追加新行,而第2行是第一行追加行(为什么不默认为NA,我不知道)。但是,如果您使用

初始化data.frame
sampleStatsDF <- data.frame(
    foo              = c(0,0),
    bar              = c(0,0),
    stringsAsFactors = TRUE)

您将看到第3行获得NA。也许您想将sampleStatsDF初始化为已知的行数。或者,您可以使用

设置后面的行名
rownames(sampleStatsDF) = 1:NROW(sampleStatsDF)