[英]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 用結果填充重量列。 為此,我已經為每個物種獲得了一個方程,因為每個物種都有不同的長度-重量關系。 假設這些長度-重量方程如下所示:
因此,因此,我想要一個看起來像這樣的 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.