【问题标题】:scalar multipling two data.frames in r标量乘以r中的两个data.frames
【发布时间】:2021-04-19 10:47:53
【问题描述】:

我在 r 中有两个 data.frames。第一个是

                cases      population  urbanisation  density temperature  h_dev_index
Austria         563.375758 10.7969091     63.07388  134.08690   13.011172   0.9898000
Belgium         109.400000 13.5885455     99.38933  443.52112   16.185297   0.9829455
Bulgaria          0.000000  5.5320606     85.84782   52.30011   20.825068   0.9669576
Croatia           2.000000  3.4548485     64.21382   60.46082   20.855372   0.9288667

第二个是:

估计标准。误差t值Pr(>|t|)

(Intercept)                        -1.916e+00  7.144e-01  -2.682  0.00785 ** 
population                         -7.327e-03  1.572e-03  -4.659 5.37e-06 ***
cases                               1.473e-03  1.544e-04   9.541  < 2e-16 ***
urbanisation                        3.798e-03  1.962e-03   1.936  0.05410 .  
density                             8.132e-05  2.512e-04   0.324  0.74641    
temperature                        -3.518e-02  8.641e-03  -4.071 6.43e-05 ***
h_dev_index                         1.842e+00  8.800e-01   2.093  0.03743 *  

我需要将第二个数据帧的第一列的系数乘以数据帧。结果应该是(对于奥地利):

-1.916e+00 + 563.375758*(-7.327e-03)+ 10.7969091*(1.473e-03)+ 63.07388*(3.798e-03)+134.08690*(8.132e-05)+     13.011172*(-3.518e-02)+   0.9898000*1.842e+00

我应该如何解决这个问题?

【问题讨论】:

  • 不应该是10.7969091*(-7.327e-03)之类的吗?
  • 是的,适用于所有行
  • 我添加了一个可能的解决方案。希望有帮助。请注意数据的名称。

标签: r dataframe vector multiplication


【解决方案1】:

尝试重塑和合并:

library(tidyverse)
#Code
res <- df1 %>% rownames_to_column('id') %>%
  pivot_longer(-id) %>%
  left_join(df2 %>% select(1,2) %>% rename(name=V1)) %>%
  group_by(id) %>%
  summarise(Val=sum(value*V2)+df2$V2[df2$V1=='(Intercept)'])

输出:

# A tibble: 4 x 2
  id          Val
  <chr>     <dbl>
1 Austria   0.451
2 Belgium  -0.200
3 Bulgaria -0.578
4 Croatia  -0.712

使用的一些数据:

#Data
df1 <- structure(list(cases = c(563.375758, 109.4, 0, 2), population = c(10.7969091, 
13.5885455, 5.5320606, 3.4548485), urbanisation = c(63.07388, 
99.38933, 85.84782, 64.21382), density = c(134.0869, 443.52112, 
52.30011, 60.46082), temperature = c(13.011172, 16.185297, 20.825068, 
20.855372), h_dev_index = c(0.9898, 0.9829455, 0.9669576, 0.9288667
)), class = "data.frame", row.names = c("Austria", "Belgium", 
"Bulgaria", "Croatia"))

df2 <- structure(list(V1 = c("(Intercept)", "population", "cases", "urbanisation", 
"density", "temperature", "h_dev_index"), V2 = c(-1.916, -0.007327, 
0.001473, 0.003798, 8.132e-05, -0.03518, 1.842), V3 = c(0.7144, 
0.001572, 0.0001544, 0.001962, 0.0002512, 0.008641, 0.88), V4 = c(-2.682, 
-4.659, 9.541, 1.936, 0.324, -4.071, 2.093), V5 = c("0.00785", 
"5.37e-06", "<", "0.05410", "0.74641", "6.43e-05", "0.03743"), 
    V6 = c("**", "***", "2e-16", ".", "", "***", "*"), V7 = c("", 
    "", "***", "", "", "", "")), class = "data.frame", row.names = c(NA, 
-7L))

请注意数据框的名称。

【讨论】:

    猜你喜欢
    • 2021-03-08
    • 1970-01-01
    • 2013-01-24
    • 2018-12-09
    • 1970-01-01
    • 2015-01-21
    • 2015-07-29
    • 2020-11-29
    • 2020-01-23
    相关资源
    最近更新 更多