安全地改变空数据框的列

时间:2017-06-01 10:04:15

标签: r dataframe dplyr

我有一个空数据框。我尝试为此数据框的列分配一些值。由于数据帧为空,我希望获得一个空数据帧,如下所示:

df = data_frame(a = integer())
df %>%
  mutate(a = 1)
# A tibble: 0 × 1
# ... with 1 variables: a <dbl>

当赋值是矢量时,会出现问题。然后我收到以下错误:

df %>%
  mutate(a = 1:2)
# Error: wrong result size (2), expected 0 or 1

当我尝试使用$运算符分配值时,即使分配单个值也会产生错误:

df$a = 1
# Error in `$<-.data.frame`(`*tmp*`, "a", value = 1) :
# replacement has 1 row, data has 0

尝试改变空数据框的列的正确和安全的方法是什么?

更新

请注意,我希望得到空数据帧。我不想在数据框中添加新行。

我希望得到空数据帧,因为mutate和$运算符不会正常更改行数。我不想违反他们的正常行为。

我正在寻找一个简洁的解决方案。可以解决此问题将代码包装到tryCatchif表达式中。但它们会使实际代码混乱。我想知道是否有更好的方法。

1 个答案:

答案 0 :(得分:0)

怎么样

df <- data_frame(a = integer())
df %>%
   mutate(a = (1:10)[seq_len(nrow(df))])

OR

df$a <- (1:10)[seq_len(nrow(df))]

基本上,如果df中包含任何行,则该列将被填充;如果不是,则返回空数据框。将(1:10)替换为所需的向量。