【发布时间】:2017-11-29 05:33:54
【问题描述】:
我有一个包含重复列名的数据框。我知道使用重复的列名是不标准的,但这些名称实际上是使用用户输入在下游重新分配的。现在,我正在尝试在位置上对数据框进行子集化,但列名被删除了重复数据。这是一个例子。
> 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 转换行名称。 同样,如果选择了列,则列名将转换为 必要时是唯一的(例如,如果多次选择列, 或者如果选择了多个给定名称的列,如果数据 框架有重复的列名)。
这解释了原因,感谢到目前为止的 cmets 解决如何最好地解决这个问题。
【问题讨论】:
-
是否可以在引入用户输入的步骤之前重命名它们?这可能真的很危险,这可能是让您轻松自在而不冒弄乱的风险的最佳组合。