0

当我初始化新数组时,我是否需要用实际数值初始化该字段中的每个值?

4

2 回答 2

2

如何附加新字段将取决于您拥有的对象。选项如下。如果length()您尝试附加的变量不等于您希望附加到的对象的行数,那么您需要先填充新列/变量NA,然后将变量附加到新的正确元素中创建的对象。例如,与

df <- data.frame(var1 = 1:5, var2 = LETTERS[1:5])

我们想在c(1,3,4)中的第三个变量的第 1、2 和 5 行添加一个向量df,然后我们可以这样做:

df$var3 <- NA ## note the single NA is recycled to the correct length

然后使用子集将新数据插入到正确的元素中

df$var3[c(1,2,5)] <- c(1,3,4)

这使:

> df$var3[c(1,2,5)] <- c(1,3,4)
> df
  var1 var2 var3
1    1    A    1
2    2    B    3
3    3    C   NA
4    4    D   NA
5    5    E    4

如果您希望附加的变量长度正确,则无需初始化任何内容。在这种情况下,使用下面描述的方法之一来实现您想要的,具体取决于您是否有数据框或矩阵。

假设一个数据框

如果你有一个数据框,那么有几种方法。例如,使用

df <- data.frame(var1 = 1:10, var2 = LETTERS[1:10])

我们能做的

> df$var3 <- letters[1:10]
> df
   var1 var2 var3
1     1    A    a
2     2    B    b
3     3    C    c
4     4    D    d
5     5    E    e
6     6    F    f
7     7    G    g
8     8    H    h
9     9    I    i
10   10    J    j

我更喜欢transform()

df <- transform(df, var3 = letters[1:10])

或相关的within()

df <- within(df, var3 <- letters[1:10]) ## note diff syntax

你也可以做

df[, "var3"] <- letters[1:10]

或者

df[, 3] <- letters[1:10]

但后者不会产生具有名称的变量,"var3"而是获得默认名称。

您还可以使用cbind()将列绑定到数据框(也适用于矩阵)。请注意,您必须将数据框作为第一个参数传递或"data.frame"直接调用该方法,否则您不会得到数据框:

df <- cbind(df, var3 = letters[1:10])
df2 <- cbind.data.frame(var3 = letters[1:10], df)
## note `df2` will have `var3` as the first column here

假设一个矩阵

如果你有一个矩阵,那么选项基本上减少为使用cbind(). 使用

mat <- matrix(1:20, ncol = 2)

你可以做

mat <- cbind(mat, 1:10)

其他选项不起作用。

于 2012-10-24T14:22:26.220 回答
0

当您尝试将空向量添加到现有矩阵/数据框时,该向量必须与数组中的其他行/列长度相同。我想最好的办法是添加一个 NA 或 NULL 值的向量,您可以在填写数据时替换它们。例如,使用包中的iris数据datasets

iris.new <- data.frame(iris, add = rep(NA, nrow(iris))

然后使用基本的解析命令来填充数据。

iris.new[13, "add"] <- 100

希望有帮助。

于 2012-10-24T14:22:14.240 回答