R语言入门问题:如何将列名对应粘贴到列均值前?
问题解决:R语言中对应列名输出月均温
问题原因
你之前的循环写法核心错误在于:当使用for(i in raw[2:13])时,i每次提取的是对应列的数值向量,而非列对象,因此无法通过colnames(i)获取列名;直接调用month.name会输出所有月份名,导致每个结果前都附带完整月份列表。
入门级解决方案
方法1:循环列索引(最直观,适合入门)
通过循环目标列的索引,先获取对应列名,再计算均值并输出:
# 获取第2到13列的列名 target_cols <- colnames(raw)[2:13] # 遍历每个列的索引 for (i in 1:length(target_cols)) { # 提取当前列名 current_month <- target_cols[i] # 计算当前列的均值并保留1位小数 temp_avg <- round(mean(raw[[current_month]]), digits = 1) # 按格式输出结果 cat(current_month, ": ", temp_avg, " ºC\n", sep = "") }
方法2:使用lapply(更简洁的向量化写法)
如果想尝试R的向量化操作,lapply可以遍历列名列表,逐个处理:
target_cols <- colnames(raw)[2:13] lapply(target_cols, function(col) { temp_avg <- round(mean(raw[[col]]), digits = 1) cat(col, ": ", temp_avg, " ºC\n", sep = "") })
三次尝试错误解析
- 第一次尝试(使用
month.name):month.name是R内置的长度为12的月份名字向量,每次循环都会输出整个向量,因此每个结果前都会显示所有月份名。 - 第二次尝试(
colnames(i)):i是提取出的列数值向量,向量没有列名属性,因此colnames(i)返回空值,导致输出时只有温度没有月份名。 - 第三次尝试(
colnames(raw[i])):i是数值向量,用它作为索引去提取raw的列会触发索引错误,因为数据框的索引需要是位置数字、列名或逻辑值,而非数值向量。
内容的提问来源于stack exchange,提问作者Lily Cowper
相关产品推荐
相关产品推荐

