gpt4 book ai didi

r - 如何使用 R 中的 if 语句将唯一函数应用于数据集的多行?

转载 作者:行者123 更新时间:2023-12-04 00:12:52 24 4
gpt4 key购买 nike

在这个数据集 (df) 中,我想根据物种应用不同的方程来计算存储在“Std.Val1”中的新输出

Year Site Quadrant species Val1 Val2 Std.Val1
2019 1 1 A 20 30 NA
2019 1 1 B NA 25 NA
2019 1 2 C 20 10 NA
2019 1 2 D 11 22 NA

c_A <- 1
m_A <- 2

c_B <- 2
m_B <- 5

c_C <- 10
m_C <- 12

c_D <- 11
m_D <- 2

我尝试关注 this example写我的代码

df %>%
mutate(
Std.Val1 = ifelse(species == "A" ~ ((log(Val1) - c_A )/(m_A)),
ifelse(species == "B" ~ ((log(Val1) - c_B )/(m_B)),
ifelse(species == "C" ~ ((log(Val1) - c_C )/(m_C)),
ifelse(species == "D" ~ ((log(Val1) - c_D )/(m_D)), NA))))
)

但我一直遇到如下错误:“错误:mutate() 输入 Std.Val1 出现问题。x“语言”对象不能被强制输入“逻辑”ℹ 输入 nem1ifelse(...)"

最佳答案

这是一种避免大量输入的 data.table 方法

library(data.table)
# Sample data
DT <- fread("Year Site Quadrant species Val1 Val2
2019 1 1 A 20 30
2019 1 1 B NA 25
2019 1 2 C 20 10
2019 1 2 D 11 22 ")
# Create lookup table with values to calculate with
DT.lookup <- data.table( species = LETTERS[1:4],
vc = c(1,2,10,11),
vm = c(2,3,12,2))
# species vc vm
# 1: A 1 2
# 2: B 2 3
# 3: C 10 12
# 4: D 11 2

# Join and calculate in 1 step
DT[DT.lookup, Std.Val1 := (log(Val1) - i.vc )/(i.vm), on = .(species)][]

# Year Site Quadrant species Val1 Val2 Std.Val1
# 1: 2019 1 1 A 20 30 0.9978661
# 2: 2019 1 1 B NA 25 NA
# 3: 2019 1 2 C 20 10 -0.5836890
# 4: 2019 1 2 D 11 22 -4.3010524

关于r - 如何使用 R 中的 if 语句将唯一函数应用于数据集的多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67225161/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com