是否有R函数可以将现有度量转换为新的逻辑度量?

我有一个从Pokemon统计数据派生的数据集,其中包含许多数字和分类数据。我的最终目标是创建一个模型或推荐系统,以便用户可以输入口袋妖怪的列表,并且模型可以找到他们可能喜欢的类似口袋妖怪。当前,数据集如下所示:

ID   Name    Type1    Type2   HP 
001  Bulba.. Grass    Poison  45
ect...

我知道type1 / type2指标可能有问题,是否有一个函数可以让我创建新的create / modify新列,如果Pokemon具有特定类型,它将添加逻辑值(0代表false,1代表是真的)在新列中?

我为缺乏光泽的解释表示歉意,但我想要的是数据集如下所示:

ID   Name    Grass  Poison Water  HP 
001  Bulba..    1      1     0    45
ect...
pmzq1234qzmp 回答:是否有R函数可以将现有度量转换为新的逻辑度量?

tidyr是用于数据重塑的软件包。在这里,我们将使用pivot_longer()将其设置为长格式,其中类型名称(Type1,Type2)将位于“名称”列中,而值(Grass,Poison等)将位于列“值”。我们 用is.na(value)过滤掉行,因为这意味着口袋妖怪没有第二种类型。我们创建一个指示变量-它得到一个1。然后,每个宠物小精灵的类型都会有indicator == 1。我们删除现在无关的“名称”列,并使用pivot_wider()value中的每个唯一值转换为它自己的列,该列将接收indicator的值作为每个单元格的值行。最后,我们对所有数字列进行突变以用0替换缺失,因为我们知道那些神奇宝贝不是那些类型。 比mutate_if(is.numeric,...)更好的解决方案是计算类型的唯一值并使用mutate_at(vars(pokemon_types),...。这不会无意中影响其他数字列。

library(tidyr)
library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter,lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect,setdiff,setequal,union
pokemon <- tibble(ID = c(1,2),Name = c("Bulbasaur","Squirtle"),Type1 = c("Grass","Water"),Type2 = c("Poison",NA),HP = c(40,50))

pokemon %>% pivot_longer(
  starts_with("Type")
) %>% 
  filter(!is.na(value)) %>% 
  mutate(indicator = 1) %>% 
  select(-name) %>% 
  pivot_wider(names_from = value,values_from = indicator,) %>% 

  mutate_if(is.numeric,.funs = function(x) if_else(is.na(x),x))
#> # A tibble: 2 x 6
#>      ID Name         HP Grass Poison Water
#>   <dbl> <chr>     <dbl> <dbl>  <dbl> <dbl>
#> 1     1 Bulbasaur    40     1      1     0
#> 2     2 Squirtle     50     0      0     1
本文链接:https://www.f2er.com/3131888.html

大家都在问