使用R的dplyr::mutate计算延误率时报错'Must be size 1, not 10'
错误原因分析
- 你在
mutate()中多余地传入了整个数据框Airline_Arrivals_Wide,管道%>%已经自动将前面的数据框传递给mutate()作为第一个参数,无需手动重复传入。mutate()的参数应该是新变量的定义语句(格式为新变量名 = 计算逻辑),而你把整个10行的数据框作为参数传入,导致dplyr无法识别——它期望每个参数是与数据框行数匹配的向量,因此触发了"must be size 1, not 10"的错误。
正确实现代码
根据你提供的中文列名数据框,正确的写法如下:
Airline_Arrivals_Long_Test <- Airline_Arrivals_Wide %>% # 定义新列“延误占比”,计算延误航班数占总航班数的百分比 mutate(延误占比 = (`延误航班数` / `总到达航班数`) * 100)
如果你的数据框列名是英文(对应delayed和Total_Arrivals),则代码为:
Airline_Arrivals_Long_Test <- Airline_Arrivals_Wide %>% mutate(delay_percent = (delayed / Total_Arrivals) * 100)
如果需要保留指定小数位数(例如2位),可以用round()函数优化:
Airline_Arrivals_Long_Test <- Airline_Arrivals_Wide %>% mutate(延误占比 = round((`延误航班数` / `总到达航班数`) * 100, 2))
内容的提问来源于stack exchange,提问作者g.senorsenor
相关产品推荐
相关产品推荐

