[英]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.