在dplyr中,无法转换具有重复名称的数据框mutate()函数

mtb9vblg  于 2023-04-09  发布在  其他
关注(0)|答案(2)|浏览(694)

昨天,当我尝试使用mutate()函数重新编码特定列中的一些值时,一切都很好。但突然,我今天再次运行这些代码,它从mutate()函数行返回错误:

Can't transform a data frame with duplicate names.

回溯:

  1. EVS_recode %〉% mutate_at(c(“C001”),~na_if(.,-1))
  2. dplyr::mutate_at(.,c(“C001”),~na_if(.,-1))
  3. dplyr:::mutate.data.frame(.tbl,!!!funs)
  4. dplyr:::mutate_cols(.data,...,caller_env = caller_env())
  5. DataMask$new(.data,caller_env)
  6. dplyr:::initialize(...)
    下面是我昨天使用的代码,它们工作得很好
#recode the 1 in column C001 to be 5, 2 to be 4#

EVS_recode <- EVS_recode %>% mutate(C001= recode(C001, '1' = 5, '2'= 4))

#recode the -1,-2,-4,-5 values to be NA in column C001#

EVS_recode <- EVS_recode %>% mutate_at(c('C001'), ~na_if(.,-1))

EVS_recode <- EVS_recode %>% mutate_at(c('C001'), ~na_if(.,-2))

EVS_recode <- EVS_recode %>% mutate_at(c('C001'), ~na_if(.,-4))

EVS_recode <- EVS_recode %>% mutate_at(c('C001'), ~na_if(.,-5))

这是我第一次遇到这么大规模的与mutate()相关的代码无法工作。有人能帮助我吗?或者在使用mutate()时遇到类似的问题?
谢谢你花时间阅读这篇文章!如果有人能给予我一个提示,那将是非常有帮助的。

omqzjyyz

omqzjyyz1#

你不能有两个变量具有相同的名称在你的dataframe,因此错误。
您可以尝试使用case_when()一次性完成此操作,也许它可以解决此错误

library(dplyr)
df <- tibble::tibble(C001 = c(-1,1,-2,3, -4, -5, 5,5,3,2,1,-1))
df %>% 
  mutate(across(C001, ~ case_when(
    C001 == 1 ~ 5,
    C001 == 2 ~ 4,
    C001 %in% c(-1, -2, -4,-5) ~ NA_real_, 
    TRUE ~ C001
  )))

也可以使用replace

df %>% mutate(across(C001, ~replace(., . %in% c(-1, -2, -4,-5), NA)))
vptzau2j

vptzau2j2#

在你的代码之前尝试df〈- data.frame(df)。

相关问题