无法在不同的机器上运行相同的代码

时间:2020-06-19 19:15:22

标签: r dplyr

我有一个df

df <- data.frame(id=c(1,2,3,4,5), ctry=c("UK","DE","IT","DE","UK"))

当我运行这段代码

df <- df %>% pivot_wider(names_from = ctry, values_from = ctry, values_fill = list(ctry = 0))

在我的Macbook上,效果很好。但是,当我在另一台Macbook上运行相同的脚本文件时,它始终显示错误“错误:无法将双精度字符转换为字符”。我该怎么做才能解决?谢谢。

2 个答案:

答案 0 :(得分:2)

我认为您使用的是R的不同版本,我使用的是R 3.6.1:

df %>% pivot_wider(values_from = "ctry", names_from="ctry",values_fill = list(ctry = 0))
Error: Can't cast `x` <double> to `to` <factor<a55ab>>.
Run `rlang::last_error()` to see where the error occurred.

在R 4.0中,我认为默认值是data.frames中的stringsAsFactors = FALSE。因此,要使其工作:

df %>% 
mutate(ctry=as.character(ctry)) %>% 
pivot_wider(values_from = ctry, names_from=ctry,values_fill = list(ctry = 0))

# A tibble: 5 x 4
     id UK    DE    IT   
  <dbl> <chr> <chr> <chr>
1     1 UK    0     0    
2     2 0     DE    0    
3     3 0     0     IT   
4     4 0     DE    0    
5     5 UK    0     0  

答案 1 :(得分:2)

显然,这是tidyr 1.1.0版本中的更改。在更改日志中:

pivot_wider()参数values_fn和values_fill现在可以是单个 价值观您现在只需要使用命名列表即可 不同值列的值也不同(#739,#746)。他们也 如果错误类型不是预期的,则会得到改进

根据R和tidyr的版本,您可能需要将“ ctry”从factor转换为character,然后引用0成为字符串。

df <- data.frame(id=c(1,2,3,4,5), ctry=c("UK","DE","IT","DE","UK"))
df$ctry <- as.character(df$ctry)
df %>% pivot_wider(names_from = ctry, values_from = ctry, 
                    values_fill = list(ctry = "0"))
相关问题