【发布时间】:2021-04-24 21:08:18
【问题描述】:
我正在尝试为珊瑚大小类转换创建一个转换矩阵,以反映以下数据框中的数据:
数据帧头
完整数据框
HAN_high_transition <- structure(list(experimental_treatment = c("Hanauma Bay_High",
"Hanauma Bay_High", "Hanauma Bay_High", "Hanauma Bay_High", "Hanauma Bay_High",
"Hanauma Bay_High", "Hanauma Bay_High", "Hanauma Bay_High", "Hanauma Bay_High",
"Hanauma Bay_High", "Hanauma Bay_High", "Hanauma Bay_High", "Hanauma Bay_High",
"Hanauma Bay_High", "Hanauma Bay_High", "Hanauma Bay_High", "Hanauma Bay_High",
"Hanauma Bay_High", "Hanauma Bay_High", "Hanauma Bay_High", "Hanauma Bay_High",
"Hanauma Bay_High", "Hanauma Bay_High", "Hanauma Bay_High", "Hanauma Bay_High",
"Hanauma Bay_High", "Hanauma Bay_High", "Hanauma Bay_High", "Hanauma Bay_High",
"Hanauma Bay_High", "Hanauma Bay_High", "Hanauma Bay_High", "Hanauma Bay_High",
"Hanauma Bay_High", "Hanauma Bay_High", "Hanauma Bay_High", "Hanauma Bay_High",
"Hanauma Bay_High", "Hanauma Bay_High", "Hanauma Bay_High", "Hanauma Bay_High",
"Hanauma Bay_High"), size_class_start = c(1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4,
5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6), size_class_end = c("1",
"2", "3", "4", "5", "6", "M", "1", "2", "3", "4", "5", "6", "M",
"1", "2", "3", "4", "5", "6", "M", "1", "2", "3", "4", "5", "6",
"M", "1", "2", "3", "4", "5", "6", "M", "1", "2", "3", "4", "5",
"6", "M"), mean_transition_prob = c(0.438576084409418, 0.335851494184828,
0.0262626262626263, 0, 0, 0, 0.199309795143128, 0.0440412528647823,
0.474382866094096, 0.397812733908991, 0.0291879837334383, 0,
0, 0.0545751633986928, 0.00476190476190476, 0.0863888888888889,
0.531626984126984, 0.272777777777778, 0.0166666666666667, 0.0111111111111111,
0.0766666666666667, 0.01, 0, 0.0266666666666667, 0.587619047619048,
0.358571428571429, 0.01, 0.00714285714285714, 0, 0, 0.1, 0.175,
0.475, 0.216666666666667, 0.0333333333333333, 0, 0, 0, 0, 0.260416666666667,
0.489583333333333, 0.25)), row.names = c(NA, -42L), groups = structure(list(
experimental_treatment = c("Hanauma Bay_High", "Hanauma Bay_High",
"Hanauma Bay_High", "Hanauma Bay_High", "Hanauma Bay_High",
"Hanauma Bay_High"), size_class_start = c(1, 2, 3, 4, 5,
6), .rows = structure(list(1:7, 8:14, 15:21, 22:28, 29:35,
36:42), ptype = integer(0), class = c("vctrs_list_of",
"vctrs_vctr", "list"))), row.names = c(NA, -6L), class = c("tbl_df",
"tbl", "data.frame"), .drop = TRUE), class = c("grouped_df",
"tbl_df", "tbl", "data.frame"))
我想根据 size_class_start(列)和 size_class_end(行)创建一个 7 行 x 6 列的转换矩阵。每个尺寸等级 (1-6) 都有转换概率 (mean_transition_prob),计算它是否会保持在相同的尺寸等级、增长或缩小,如果 start_size_class > 1。第 7 行表示死亡概率或“M”。
我尝试使用 matrix() 函数但收到以下错误:
尝试的代码
col <- as.character(c(1, 2, 3, 4, 5, 6))
row <- as.character(c(1, 2, 3, 4, 5, 6, "M"))
m <- matrix(HAN_high_transition$mean_transition_prob, nrow = 7, ncol = 6, dimnames = list(HAN_high_transition$size_class_start, HAN_high_transition$size_class_end))
Error in matrix(HAN_high_transition$mean_transition_prob, nrow = 7, ncol = 6, :
length of 'dimnames' [1] not equal to array extent
如果有调整此代码或完全尝试其他方法的解决方案,请告诉我。我对任何和所有建议持开放态度。感谢您的宝贵时间!
【问题讨论】:
-
你很亲密:
m <- matrix(HAN_high_transition$mean_transition_prob, nrow = 7, ncol = 6, dimnames = list(row, col)). -
如果您想将此作为解决方案发布,我可以将您的解决方案标记为我的问题的答案。谢谢!
标签: r dataframe matrix transition