【发布时间】:2020-02-05 19:49:02
【问题描述】:
在我的工作中,我需要为一个新列分配一个分数。该分数的数值因物种而异。
目前我有以下方法可以实现这一点,但对于重复使用多个数据集来说不是很简洁:
bird$VIS <- 0 # creates the new column and populates it with 0
bird$VIS[bird$species == "Tyto alba" ] <- 0.0502 # assigns this score to the VIS column for rows where the species is "Tyto alba"
bird$VIS[bird$species == "Branta leucopsis" ] <- 0.044
bird$VIS[bird$species == "Ciconia nigra" ] <- 0.002
bird$VIS[bird$species == "Grus grus" ] <- 0.001
bird$VIS[bird$species == "Bubo bubo" ] <- 0.004513
bird$VIS[bird$species == "Neophron percnopterus" ] <- 0.0015333
bird$VIS[bird$species == "Platalea leucorodia" ] <- 0.001
等等,总共有 26 个物种,但这个子样本应该足以证明我想要做什么。
我的问题本质上是我如何将它变成一个无论所有物种是否都存在于数据框中都可以工作的函数?
本质上,我希望能够编写如下内容,而不是使用上述顺序行分配:
assign_VIS_function(bird)
导致输出类似于:
SPECIES VIS
Branta leucopsis 0.044
Tyto alba 0.0502
Tyto alba 0.0502
Tyto alba 0.0502
Tyto alba 0.0502
Gyps fulvus 0.22838
Gyps fulvus 0.22838
Gyps fulvus 0.22838
等等……
非常感谢。
【问题讨论】:
-
你试过 ifelse() 逻辑吗?
-
使用映射创建一个向量。像
vec<-c(Tyto alba=0.502, Branta leucopsis=0.044, ...)这样的东西。然后试试vec[bird$species]。 -
创建一个查找表 - 一个包含
species列和VIS列的数据框。您可以将其保存为 CSV 文件,查看它以验证值是否为您想要的值,根据需要对其进行编辑等。当您要将列添加到数据框时,merge两个数据框,@ 987654329@ -
使用
case_when来自dplyr
标签: r function variable-assignment