【问题标题】:dplyr mutate: solve unique names errordplyr mutate:解决唯一名称错误
【发布时间】:2017-05-10 23:30:37
【问题描述】:

我有一个包含 10 列的数据框。例如,这是虚拟版本:

df = tbl_df(replicate(10,sample(0:1,1000,rep=TRUE)))

我想在 dplyr 中这样做:

df %>% mutate(V2 = ifelse(is.na(V6), V2, paste(V2,V3,sep=" ")))

我得到:

Error: Each variable must have a unique name.

但如果我这样做:

df$V2 = ifelse(is.na(df$V6), df$V2, paste(df$V2,df$V3,sep=" "))

它有效。

如何使用dplyr 语句完成最后一步?

【问题讨论】:

  • 你为什么不做df %>% mutate(V2=ifelse(is.na(V6), V2, paste(V2,V3,sep=" ")))
  • 是的,我做到了!它说Error: Each variable must have a unique name.
  • 当我用你的虚拟 df 执行此操作时,它可以工作。检查你的真实df的列名。
  • 哈哈,谢谢,我确实查看了案例,在我的文件中,名称是 V1、V2、V3...
  • 正如@Lamia 所说,问题很可能出在列名上。试试:df %>% setNames(make.names(names(.), unique = TRUE)) %>% mutate(V2 = ifelse(is.na(V6), V2, paste(V2, V3, sep = " ")))

标签: r dplyr


【解决方案1】:

正如@Lamia 所说,问题很可能在于重复的列名。

创建具有重复列名的示例数据框。你应该永远不要那样做:

wrong_df <- data.frame(
  V1 = 1:3,
  V2 = 1:3,
  V3 = 1:3,
  V6 = c(4, NA, 6),
  V1 = 7:9,
  check.names = FALSE
)
wrong_df
#   V1 V2 V3 V6 V1
# 1  1  1  1  4  7
# 2  2  2  2 NA  8
# 3  3  3  3  6  9

重现问题:

library(dplyr)
wrong_df %>% 
  mutate(V2 = ifelse(is.na(V6), V2, paste(V2, V3, sep = " ")))
# Error: Each variable must have a unique name.
# Problem variables: 'V1'

通过使用make.names() 对列名进行重复数据删除来解决此问题。请注意,第二个V1 列已重命名为V1.1(参见help("make.names")):

wrong_df %>% 
  setNames(make.names(names(.), unique = TRUE)) %>% 
  mutate(V2 = ifelse(is.na(V6), V2, paste(V2, V3, sep = " ")))
#   V1  V2 V3 V6 V1.1
# 1  1 1 1  1  4    7
# 2  2   2  2 NA    8
# 3  3 3 3  3  6    9

【讨论】:

  • 非常感谢!!!我所做的就是输入“年龄”、“城市”等“奇怪”的名字,而且它确实有效:)
猜你喜欢
  • 2018-11-11
  • 1970-01-01
  • 2016-01-10
  • 2015-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-20
  • 1970-01-01
相关资源
最近更新 更多