r-使用不同行长的列计算:根据多个因子水平的参考值计算缩写百分比
发布时间:2022-03-04 21:36:57 245
相关标签:
我对R很陌生,第一次写函数时就被卡住了。我有一个数据集,里面有来自不同时期叶子提取物的多种化合物。下面是一些示例数据。
白天 | 价值观 | 复合物 |
---|---|---|
1 | 67 | 精氨酸 |
1 | 68 | 精氨酸 |
1 | 72 | 精氨酸 |
2 | 63 | 精氨酸 |
2 | 57 | 精氨酸 |
3 | 65 | 精氨酸 |
3 | 64 | 精氨酸 |
1 | 370 | 脯氨酸 |
1 | 355 | 脯氨酸 |
2 | 400 | 脯氨酸 |
3 | 450 | 脯氨酸 |
1 | 800 | 柠檬酸 |
1 | 756 | 柠檬酸 |
2 | 780 | 柠檬酸 |
3 | 600 | 柠檬酸 |
我想计算从第1天开始的每个值的缩写,以百分比的形式表示。这意味着我希望所有第1天数值的平均值成为我的参考值。
percentage <- function(x){
mean1 <- mean(my_data$values[my_data$compound==x & my_data$day=="1"])
percent <- ((my_data$values[my_data$compound==x] - mean1) / mean1) * 100
return(as.numeric(percent))
}
该函数似乎适用于单个化合物,但我无法同时操作它,当我想将其作为新列添加到数据框时,
my_data$abbreviation <- percentage("Arginine")
我收到一条错误消息,因为行数不相等。有人知道我该如何克服这个问题吗?我必须重写函数吗?如果是,如何重写?
提前谢谢!
my_data <-
tibble::tribble(
~day, ~values, ~compound,
1L, 67L, "Arginine",
1L, 68L, "Arginine",
1L, 72L, "Arginine",
2L, 63L, "Arginine",
2L, 57L, "Arginine",
3L, 65L, "Arginine",
3L, 64L, "Arginine",
1L, 370L, "Proline",
1L, 355L, "Proline",
2L, 400L, "Proline",
3L, 450L, "Proline",
1L, 800L, "Citric acid",
1L, 756L, "Citric acid",
2L, 780L, "Citric acid",
3L, 600L, "Citric acid"
)
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报