r语言 - dplyr "Select" - 错误:发现重复的列名



我正试图使用select{dplyr}将列从DT提取到新的DT

extract_Data <- select(.data = master_merge, subjectID, activity_ID,
                           contains("mean\(\)"), contains("std\(\)"))

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

这里没有可以创建的重复列。弄不明白为什么。我尝试过select的各种变体,但总是出现错误:列名重复。

我该如何解决这个问题?我已经检查了所有563个列名,没有重复的。

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

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

这是我找到的解决方案:

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

这会在没有所有重复列的情况下对数据集进行子集设置。

希望能有所帮助。

重复匹配过滤器可能导致"重复名称"错误。示例:

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

如果您不需要这些列,请使用消除它们

x <- x[ !duplicated(names(x)) ]

这不是一个直接的答案,但这将帮助很多人。

对于所有Coursera的学生来说,这个数据集面临着这个问题:有重复的列名。例如,"fBodyAccJerk-bandsEnergy()-1,16"被找到两次。检查:

your_merged_data_with_column_ames[,400:420]

我很想显示输出,但我的浏览器既不支持"代码"按钮,也不支持ctrl-K快捷方式,而且数据太多,无法手动缩进。亲自尝试此代码,并仔细检查"未显示的变量"!

我现在正在自己研究一个解决方案,可能使用上面的答案,也可能使用课程论坛。

基于Lantana的伟大答案,这里有一个用于具有pipe集成的纯dplyr解决方案的函数:

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

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

在分配列名之前,通过使用获取索引列表来过滤列

meanStdColumns <- grep("mean|std", features$V2, value = FALSE)

然后使用分配列名

meanStdColumnsNames <- grep("mean|std", features$V2, value = TRUE)

最新更新