删除并添加后行后重复row.names

时间:2016-02-07 13:13:51

标签: r

我有一个数据框:

df <- data.frame(id = as.integer(integer()),
                   points = as.integer(integer()),
                   row.names = 1,
                   stringsAsFactors = FALSE)

添加ID时,如果已存在给定ID,则将其点设置为预定义的常量max_points,否则如果给定的ID不存在则创建它:

IDs <- c(1,2,3,20,30,55)     # assume these values has been generated
df[IDs, ] <- max_points

如果某些行中的点数达到零,则会删除行:

df <- subset(df, points > 0)

然而,在删除某些行并稍后在某个时刻将新值添加回其位置时,会出现重复的row.names错误:

> df
   points
7    2
8    2
13   2
14   2
15   2
16   2
17   2
18   2
> df[13, ] <- 13
> df
Error in data.frame(points = c(" 2", " 2", " 2", " 2", " 2", " 2", " 2",  : 
  duplicate row.names: 13

进一步检查后,新数据框如下所示:

    points
 7    2 
 8    2
13    2
14    2
15    2
16    2
17    2 
18    2
 9   NA
10   NA
11   NA
12   NA
13   13

为什么它会这样?有没有办法解决这个问题?

修改

要重现此问题,请参阅以下代码段:

IDs <- c(13,14,15,8,16,17,18,7)
df <- data.frame(ID = as.integer(integer()),
                       points = as.integer(integer()),
                       row.names = 1,
                       stringsAsFactors = FALSE)
df[IDs, ] <- 2
df <- subset(df, points > 0)
df[13, ] <- 13

1 个答案:

答案 0 :(得分:1)

我猜,问题出现在这一行

df[13,] <- 13

在这里,您要为第13行分配值。由于您的df具有较少的行,因此在它们之间创建了额外的NA行。我想,您想将值分配给名为&#34; 13&#34;的行,因此

df["13",] <- 13
相关问题