我有一个包含重复列名的数据框。我知道使用重复的列名称是非标准的,但这些名称实际上是使用用户输入重新分配到下游的。目前,我尝试按位置对数据框进行子集,但列名称会进行重复数据删除。这是一个例子。
> df <- data.frame(x = 1:4, y = 2:5, y = LETTERS[2:5], y = (2+(2:5)), check.names = F)
> df
x y y y
1 1 2 B 4
2 2 3 C 5
3 3 4 D 6
4 4 5 E 7
但是,当我尝试子集时,名称会改变......
> df[, 1:3]
x y y.1
1 1 2 B
2 2 3 C
3 3 4 D
4 4 5 E
有没有办法防止这种情况发生?它只发生在我对列而不是行进行子集时。
> df[1:3,]
x y y y
1 1 2 B 4
2 2 3 C 5
3 3 4 D 6
编辑其他人注意到此行为:
我已经从extract.data.frame(类型?'['
)的帮助页面中了解了行为和相关部分
相关部分说明:
如果[返回一个数据框,它将具有唯一(和非缺失)行 名称,如有必要,使用make.unique转换行名称。 同样,如果选择了列,则列名将转换为 必要时是唯一的(例如,如果多次选择列, 或者,如果数据选择了给定名称的多个列 框架具有重复的列名称。)
这解释了原因,感谢迄今为止关于如何最好地解决这个问题的评论。
答案 0 :(得分:3)
这是一个选项,虽然我认为重复的列名不是一个好主意。
as.data.frame(as.list(df)[1:3], check.names = F)
# x y y
# 1 1 2 B
# 2 2 3 C
# 3 3 4 D
# 4 4 5 E