将具有默认值的列添加到具有零行的数据框时出错

时间:2016-09-05 15:38:58

标签: r dataframe

为什么这样做

# add ONE column to dataframe with zero rows

x <- data.frame(a=character(0))
x["b"] <- character(0)

虽然这不是?

# add SEVERAL columns to dataframe with zero rows

x <- data.frame(a=character(0))
x[c("b", "c")] <- character(0)

error in value[[jvseq[[jjj]]]] : index out of limits  [... freely translated]

注意,如果我们有非零行,这是完全可以的。

x <- data.frame(a=1)
x["b"] <- NA

x <- data.frame(a=1)
x[c("b", "c")] <- NA

将多列添加到零行数据帧的简单替代方法是什么?

1 个答案:

答案 0 :(得分:1)

来自help("[.data.frame")

  

数据帧可以在多种模式下编制索引。当[和[[使用   使用单个向量索引(x [i]或x [[i]]),它们索引数据帧   好像它是一个清单。

来自help("[")

  

递归(类似列表)对象

     

索引[类似于原子向量并选择指定元素的列表。

因此,您需要传递一个列表(或data.frame):

x <- data.frame(a=character(0))
x[c("b", "c")] <- list(character(0), character(0))
str(x)
#'data.frame':  0 obs. of  3 variables:
# $ a: Factor w/ 0 levels: 
# $ b: chr 
# $ c: chr