创建空数据框并出现错误“替换有1行,数据有0个出现”。

3

我需要创建一个空的数据框,并设置列以便稍后添加值。

我的代码:

df <- data.frame()

varNames <- c("rho", "lambda", "counts")
colnames(df)<- varNames
df['$rho'] <- NA
df["lambda"] <- NA
df["counts"] <- NA

但是

在 [<-.data.frame(*tmp*, "$rho", value = NA) : 替换只有1行,而数据为0

发生错误。


1
你可以使用 data.frame(rho = numeric(), lambda = numeric(), counts = numeric()) - akrun
你也可以使用 data.frame(rho = NULL, lambda = NULL, counts = NULL)。 - Hardik Gupta
@Sotos 我正在尝试创建一个数据框并附加 R 的输出,最终将其写入 Excel 表格。这就是为什么我要指定列的原因。 - Lumos
这是一个XY问题,你需要用 *apply 替换 forloop 并将结果保存在列表中,这样我们就不需要在 forloop 中创建以上空的 dataframe,并在其中“增长”。 - zx8754
对我来说,这有点像是一个 bug - 在问题中使用应该不会有问题。 - Peter.k
显示剩余3条评论
1个回答

1
我们可以使用。
df1 <- data.frame(rho = numeric(), lambda = numeric(), counts = numeric()) 
rbind(df1, list(rho = NA, lambda = NA, counts = NA))
#  rho lambda counts
#1  NA     NA     NA

如果我们要单独分配,那么使用一个 list 会很有用。
lst <- setNames(vector("list", 3), varNames)
lst[['rho']] <- NA
lst[['lambda']] <- NA
lst
#$rho
#[1] NA

#$lambda
#[1] NA

#$counts
#NULL

因为list元素的长度可以不同,而data.frame是具有等长列的list。一旦分配完成且长度相等,则使用data.frame(lst)将其转换为data.frame并将其写回文件。


@Kay 这里的目标是什么? - akrun
它可以与rbind一起使用,但不能与我在问题中添加3个值为NA的列的代码一起使用。你知道为什么会发生这种情况吗?我正在尝试创建一个数据框并附加R输出,最终写入Excel表格。这就是为什么我要指定这些列的原因。 - Lumos
@Kay 如果你想要将它单独添加,那么使用一个list代替data.frame,因为data.frame是一个具有等长列的list - akrun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接