R语言中转置矩阵中位数存入dataframe列数值重复问题如何解决
R中位数计算结果赋值异常解决方案
异常原因
赋值后数值全部相同的核心触发点为两个:
data.frame执行t()转置后会返回矩阵类型,原数据框的12列会转为矩阵的12行,维度逻辑和数据框存在差异- 赋值时触发了R的向量循环填充规则:如果赋值的向量长度和目标数据框的行数不匹配,R会自动重复短向量填充整列,若误将单个中位数赋值给12行的列,就会出现全列值相同的情况
注:
median()函数默认返回单个中位数数值,若打印w1得到12个不同值,说明实际执行的是按行/按列批量计算中位数的逻辑,只要保证计算得到的w1长度为12,和目标数据框的行数一致即可正常赋值。
正确操作方法
方法1:无需转置直接计算(推荐)
不需要额外转置,直接用apply对原数据框的列维度批量计算中位数:
# 第二个参数为2代表按列计算,返回长度为12的中位数向量 w1 <- apply(prod_fm_wt_3, 2, median) # 直接赋值给目标数据框的对应列即可 target_df$median_col <- w1
方法2:基于转置矩阵计算
如果需要沿用现有转置逻辑,对转置后的矩阵按行计算中位数即可:
t <- t(prod_fm_wt_3) # 第二个参数为1代表按行计算,每行对应原数据框的一列 w1 <- apply(t, 1, median) # 赋值给目标列 target_df$median_col <- w1
内容的提问来源于stack exchange,提问作者Kelly yisi Liu
相关产品推荐
相关产品推荐

