目标: 我正在尝试使用带有计数器的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作为数据帧行索引???
答案 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
,我不知道)。但是,如果您使用
sampleStatsDF <- data.frame(
foo = c(0,0),
bar = c(0,0),
stringsAsFactors = TRUE)
您将看到第3行获得NA
。也许您想将sampleStatsDF
初始化为已知的行数。或者,您可以使用
rownames(sampleStatsDF) = 1:NROW(sampleStatsDF)