dplyr"选择" - 错误:找到重复的列名称

时间:2015-02-16 19:35:14

标签: r dplyr

我正在尝试使用select {dplyr}

将DT中的列提取到新DT
extract_Data <- select(.data = master_merge, subjectID, activity_ID,
                           contains("mean\\(\\)"), contains("std\\(\\)"))

有563列,所以我要求提取第一列和第二列(主题,活动)以及存在mean()或std()的所有其他列。

此处无法创建重复列。所以难以理解为什么。我已经尝试了select的每个变体,但总是错误:重复的列名。

我如何解决这个问题 - 我已经浏览了所有563列名称,并且没有重复项。

7 个答案:

答案 0 :(得分:31)

问题的根源是原始列名称中的无效字符。 Variable Name Restrictions in R中的讨论也适用于列名。尝试使用make.names()强制使用有效字符的唯一列名。

valid_column_names <- make.names(names=names(master_merge), unique=TRUE, allow_ = TRUE)
names(master_merge) <- valid_column_names

答案 1 :(得分:12)

以下是我找到的解决方案:

data <- data[ , !duplicated(colnames(data))]

此子集不包含所有重复列的数据集。

希望它有所帮助。

答案 2 :(得分:8)

重复出匹配过滤器可能导致&#34;重复的名称&#34;错误。例如:

library(dplyr)
x <- data.frame(1, 2, 3)
names(x) <- c("a", "a", "b")

x %>%
  select(matches("b"))

如果您不需要这些列,请使用

删除它们
x <- x[ !duplicated(names(x)) ]

答案 3 :(得分:0)

不是直接的答案,但这会对很多人有所帮助。

对于所有使用此数据集遇到此问题的Coursera学生:重复的列名。例如,&#39; fBodyAccJerk-bands能量() - 1,16&#39;被发现两次。检查:

  

your_merged_data_with_column_names [400:420]

我喜欢显示输出,但我的浏览器不支持&#39;代码&#39;按钮也不是ctrl-K快捷方式,并且手动缩进的数据太多。请亲自试用此代码,并仔细检查未显示的变量&#39;!

我现在正在研究解决方案,可能使用上述答案或课程论坛。

答案 4 :(得分:0)

基于Lantana great answer,以下是dplyr整合pipe解决方案的函数:

validate.names = function(df){
  rtn = df
  valid_column_names = make.names(names=names(df), unique=TRUE, allow_ = TRUE)
  names(rtn) = valid_column_names
  rtn
}

然后您可以像这样使用它:

extract_Data %>% validate.names

答案 5 :(得分:-1)

我对同样的错误感到困惑。避免使用选择。如果meanStdcolumns是包含mean或std的列的列表(你可以使用grep获得),那么master_merge [,meanStdcolumns]似乎可以工作。

答案 6 :(得分:-3)

在分配列名之前,通过使用

获取索引列表来过滤列
meanStdColumns <- grep("mean|std", features$V2, value = FALSE)

然后使用

分配列名称
meanStdColumnsNames <- grep("mean|std", features$V2, value = TRUE)