当“within”时,R 数据帧上的列重复下标

问题描述 投票:0回答:1

R 版本 4.4.2 (2024-10-31) --“Pile of Leaves”,最新的 macOS

$ R --vanilla
> load(file="tttdf")
> str(ttt)
'data.frame':   3 obs. of  17 variables:
 $ .mn.r      : num  0 0 0
 $ .sd.r      : num  0 0 0
 $ .mn.g      : num  0 0 0
 $ .sd.g      : num  0 0 0
 $ .cor.r.g   : num  1 1 1
 $ sep        : num  -1 -1 -1
 $ beta.g.ldp : num  0 0 0
 $ beta.dp.ldp: num  1 1 1
 $ beta.r.ldp : num  0 0 0
 $ sep        : num  -2 -2 -2
 $ lastdpr    : num  -3 -5 -6
 $ declinedpr : num  0 2 3
 $ sep        : num  -3 -3 -3
 $ beta.r.lr  : num  0 0 0
 $ beta.g.lg  : num  0 0 0
 $ beta.g.lr  : num  0 0 0
 $ beta.r.lg  : num  0 0 0

ttt <- within(ttt, hello <- 22)

Error in `[<-.data.frame`(`*tmp*`, nl, value = list(hello = 22, .mn.r = c(0,  : 
  duplicate subscripts for columns
> ## make it work
> xxx <- ttt[,1:ncol(ttt)]
> xxx <- within(xxx, hello <- 22)

我不知道是什么原因造成的。 这就是为什么我也无法缩短示例 --- 例如,通过删除列。

r dataframe
1个回答
3
投票

sep
列重复。使用
ttt[,1:ncol(ttt)]
为数据框添加下标会自动修复列名称,从而解决问题。

在下面的示例中,我创建了一个具有两个相同列名的数据框。它会产生与您得到的相同的错误。当我为列添加下标时,它们的名称是固定的。

df <- data.frame(a = 1, a = 2)
attr(df, "names") <- c("a", "a")

within(df, hello <- 22)
# Error in `[<-.data.frame`(`*tmp*`, nl, value = list(hello = 22, a = 1,  : 
#  duplicate subscripts for columns

df[1:ncol(df)]
#   a a.1
# 1 1   2
© www.soinside.com 2019 - 2024. All rights reserved.