返回

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"
  )
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
相关帖子