R语言使用names()重命名dataframe变量无法识别全部变量怎么办
问题根源
代码的核心错误出在mutate步骤的赋值逻辑:
- 第一次调用
summarize生成的prog只有2列:分组列totexp_rng,以及你计算的分位值列(默认列名为你写的计算表达式) - 后续
mutate中,你将pro %>% group_by(totexp_rng) %>% summarize(mean(food_t))的返回值直接赋值给新列:这个summarize返回的是包含2列的完整dataframe,不是单列的均值向量,会导致prog出现嵌套列、列数异常的结构,因此names()赋值时会识别到列数和你提供的3个名称不匹配。
修正方案
你可以在一次summarize调用中同时计算两个统计量,不需要拆分步骤也不需要额外调用mutate,代码更简洁也不会出现结构错误:
prog <- pro %>% group_by(totexp_rng) %>% summarize( mean = mean(food_t), to90 = sqrt(var(food_t)) * 1.2816 )
运行上述代码后prog天然包含3列:totexp_rng、mean、to90,不需要额外调用names()重命名。
如果你确实需要分开计算,要从summarize结果中提取单列或者通过关联合并补充字段,不要直接把整个dataframe赋值给单个列:
# 仅作修正演示,不推荐该写法 prog <- pro %>% group_by(totexp_rng) %>% summarize(to90 = sqrt(var(food_t))*1.2816) mean_vals <- pro %>% group_by(totexp_rng) %>% summarize(mean = mean(food_t)) prog <- inner_join(prog, mean_vals, by = "totexp_rng")
内容的提问来源于stack exchange,提问作者Simon Probert
相关产品推荐
相关产品推荐

