簡體   English   中英

R:使用每個類別的不同方程按類別計算新變量

[英]R: Caculating new variable by category with a different equation for each category

我一直在尋找這個問題的答案一段時間,但似乎沒有什么適合我。

我有一個名為“數據”的 dataframe,如下所示:

物種 長度 重量
一個 15 0
一個 8 0
20 0
C 4 0
11 0
16 0
C 13 0

我想做的是根據物種的長度計算每個物種的重量 ant 用結果填充重量列。 為此,我已經為每個物種獲得了一個方程,因為每個物種都有不同的長度-重量關系。 假設這些長度-重量方程如下所示:

  • “A”種:重量=長度*2
  • “B”種:重量=長度^3
  • “C”種:重量=長度/5

因此,因此,我想要一個看起來像這樣的 dataframe:

物種 長度 重量
一個 15 30
一個 8 16
20 8000
C 4 0.8
11 1331
16 4096
C 13 3.6

我試圖這樣做:

Species <- c("A", "A", "B", "C", "B","B","C")
Length <- c(15,8,20,4,11,16,13)
Weight <- c(0,0,0,0,0,0,0)
data <- data.frame(Species, Length, Weight)

for(i in 1:length(data$Length)){if(data$Species[i]=="A"){
data$Weight[i]<-data$Length[i]*2
}else if(data$Species[i]=="B"){
data$Weight[i]<-data$Length[i]^3
}else if(data$Species=="C"){
data$Weight[i]<-data$Length[i]/5
} else {data$Weight[i]<-"NA"}
}

代碼運行沒有錯誤,但 data$Weigth 列未填充結果。 但是,當我嘗試代碼而不使用 for() 並將 [i] 替換為行號(例如 [4])時,它做了正確的事情並用該行的結果填充了 Weight 列。

實際上,我有 40 個物種和超過 5000 個觀察值,因此不能單獨運行每一行的代碼。

有什么建議么? 也許有更簡單的方法,但我沒有看到? 任何幫助都感激不盡。

謝謝

在基礎 R 中,您可以執行以下操作:

transform(df, 
  Weight = Vectorize(\(x, type) switch(type, A = x*2, B= x^3, C =x/5))(Length, Species))

  Species Length Weight
1       A     15   30.0
2       A      8   16.0
3       B     20 8000.0
4       C      4    0.8
5       B     11 1331.0
6       B     16 4096.0
7       C     13    2.6

library(tidyverse)
df %>%
  mutate(Weight = case_when(Species == 'A' ~Length * 2,
                            Species == 'B' ~ Length ^ 3,
                            Species == 'C' ~ Length / 5))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM