我有一个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上运行相同的脚本文件时,它始终显示错误“错误:无法将双精度字符转换为字符”。我该怎么做才能解决?谢谢。
答案 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"))