【问题标题】:Correct variable values in a dataframe applying a function using variable-specific values in another dataframe in R更正数据框中的变量值,使用 R 中另一个数据框中的变量特定值应用函数
【发布时间】:2020-12-02 12:31:37
【问题描述】:

我有一个名为“covs”的 df,在行和列中都有站点,每个站点有 9 个不同的环境变量。我需要使用函数x - center_values(x)) / scale_values(x) 重新计算每个单元格的值。但是,'center_values' 和 'scale_values' 对于每个环境协变量是不同的,它们位于另一个称为 'correction' 的 df 中。

我找到了许多解决方案,可以为整个 df 应用函数,但不能根据要转换的值的 id 应用特定值。

covs <- read.table(text = "X        elev   builtup     river       grip            pa       npp  treecov
384879-2009   1   24.379101 25188.572 1241.8348  1431.1082  5.705152e+03 16536.664 60.23175
385822-2009   2   29.533478 32821.770 2748.9053  1361.7772  2.358533e+03 15773.115 62.38455
385823-2009   3   30.097059 28358.244 2525.7627  1073.8772  4.340906e+03 14899.451 46.03269
386765-2009   4   33.877861 40557.891  927.4295  1049.4838  4.580944e+03 15362.518 53.08151
386766-2009   5   38.605156 36182.801 1479.6178  1056.2130  2.517869e+03 13389.958 35.71379", 
header= TRUE)

correction <- read.table(text = "var_name    center_values     scale_values
1        X            196.5 113.304898393671
2     elev 200.217889868483 307.718211316278
3  builtup 31624.4888660664 23553.2438790344
4    river 1390.41023742909 1549.88661649406
5     grip 5972.67361738244 6996.57793554527
6       pa 2731.33431010861 4504.71055521749
7      npp 10205.2997576655 2913.19658598938
8  treecov 47.9080656134352 17.7101565911347
9   nonveg 7.96755640452006 4.56625351682905", header= TRUE)

有人可以帮我编写代码,使用“校正”中报告的特定协变量值重新计算“covs”中的环境协变量值吗?例如。对于 df 'covs' 的 'elev' 列中的每个值,我需要减去在 'corrected' df 中为 'elev' 报告的 'center_value',然后除以报告中的 'elev' 的 'scale_value' '纠正' df。感谢您的热心帮助。

【问题讨论】:

    标签: r database function dataframe


    【解决方案1】:

    您可以将var_name 分配给行名,然后循环遍历covs 的名称以在sapply 中进行计算。

    rownames(correction) <- correction$var_name
    
    res <- as.data.frame(sapply(names(covs), function(x, y) 
      (covs[, x] - correction[x, "center_values"])/correction[x, "scale_values"]))
    res
    #           X       elev     builtup       river       grip          pa      npp    treecov
    # 1 -1.725433 -0.5714280 -0.27324970 -0.09586213 -0.6491124  0.66015733 2.173339  0.6958541
    # 2 -1.716607 -0.5546776  0.05083296  0.87651254 -0.6590217 -0.08275811 1.911239  0.8174114
    # 3 -1.707781 -0.5528462 -0.13867495  0.73253905 -0.7001703  0.35730857 1.611340 -0.1058927
    # 4 -1.698956 -0.5405596  0.37928543 -0.29871910 -0.7036568  0.41059457 1.770295  0.2921174
    # 5 -1.690130 -0.5251972  0.19353224  0.05755748 -0.7026950 -0.04738713 1.093183 -0.6885470
    

    检查例如"elev":

    (covs[,"elev"] - correction["elev", "center_values"]) / correction["elev", "scale_values"]
    # [1] -0.5714280 -0.5546776 -0.5528462 -0.5405596 -0.5251972
    

    【讨论】:

      猜你喜欢
      • 2021-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多