使用pivot_longer转换数据格式时遇类型错误求助
问题原因及解决方案
错误原因
pivot_longer是tidyverse工具集里的函数,只能处理**数据框(data frame/tibble)类型的对象,而你通过sapply生成的u是矩阵(matrix)**类型,所以会抛出"no applicable method"的错误。
修正后的代码
library(tidyverse) n= 8 dm<- 300/1000 # 最大直径(mm) am<- (dm^2*pi)/4 # 对应最大面积(m²) qm<- 800/3600 # 最大流量(m³/h) i<- am/n ii<- qm/(am/i) A<- seq(from = (0+i), to = am, by = i) Q<- seq(from = (0+ii),to = qm, by = ii) u<- sapply(Q,'/',A) colnames(u) = A rownames(u) = Q # 先把矩阵转为带行名的tibble,再做宽转长 u %>% as_tibble(rownames = "Flow Rate (m^3/h)") %>% pivot_longer( cols = -`Flow Rate (m^3/h)`, # 选中除流量列外的所有列 names_to = "Area (m^2)", values_to = "Velocity (m/s)" # u是Q/A,对应流速,可按需修改名称 )
关键修正点
- 用
as_tibble(rownames = ...)把矩阵转为tibble,同时把原矩阵的行名(流量值)转为单独一列,避免丢失信息 pivot_longer的cols参数指定为-排除流量列,自动选中所有面积列,不需要手动写c(u[1:8])这种错误写法
内容的提问来源于stack exchange,提问作者Joe Bennet
相关产品推荐
相关产品推荐

