我有一个数据框:
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
答案 0 :(得分:1)
我猜,问题出现在这一行
df[13,] <- 13
在这里,您要为第13行分配值。由于您的df具有较少的行,因此在它们之间创建了额外的NA行。我想,您想将值分配给名为&#34; 13&#34;的行,因此
df["13",] <- 13