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

sco*_*opa 17 r dplyr

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

extract_Data <- select(.data = master_merge, subjectID, activity_ID,
                           contains("mean\\(\\)"), contains("std\\(\\)"))
Run Code Online (Sandbox Code Playgroud)

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

没有可以在此处创建的重复列.所以难以理解为什么.我已尝试选择的每个变体,但总是错误:重复列名称.

我怎么能解决这个问题 - 我已经浏览了所有563列名称,并且没有重复.

小智 31

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

valid_column_names <- make.names(names=names(master_merge), unique=TRUE, allow_ = TRUE)
names(master_merge) <- valid_column_names
Run Code Online (Sandbox Code Playgroud)


小智 13

这是我找到的解决方案:

data <- data[ , !duplicated(colnames(data))]
Run Code Online (Sandbox Code Playgroud)

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

希望能帮助到你.


ber*_*ant 9

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

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

x %>%
  select(matches("b"))
Run Code Online (Sandbox Code Playgroud)

如果您不需要这些列,请将其删除

x <- x[ !duplicated(names(x)) ]
Run Code Online (Sandbox Code Playgroud)