【问题标题】:How to multiply columns of a tibble by corresponding rows or columns of another tibble in R?如何将 tibble 的列乘以 R 中另一个 tibble 的相应行或列?
【发布时间】:2022-01-13 09:28:02
【问题描述】:

我正在尝试将 tibble 的列乘以 R 中另一个 tibble 的行。我尝试从 here 进行扫描和匹配,但它只使用一个向量(第二个 tibble 的一列)。我的第一个数据集的一个小样本如下所示:

t_mode ch_value purpose sov ownership age_16 joint atwork sov_time
SHARED 2.06 eat 0 0 0 1 0 0.12
SHARED 2.19 eat 0 0 0 0 0 0.08
WALK 2.45 eat 0 1 0 1 0 0.02
PAY 2.30 eat 0 0 0 0 0 0.18
PAY 2.09 eat 0 0 0 0 0 0.12
ALONE 1.82 work 0 0 0 0 0 0.03
SHARED 0.2 work 0 0 0 1 0 0.14

我的第二个数据集的小样本如下所示:

Expression ALONE SHARED WALK PAY
sov -999 0 1 0
ownership -999 0 1 0
age_16 -999 0 1 0
joint -999 0 1 0
atwork 1 0 0 0
sov_time 1 0 0 0

实际的数据集非常大(1000 行和 100k 列)。如果有人能帮助我找到解决方案,我将不胜感激。

【问题讨论】:

    标签: r dplyr tidyverse tibble mapply


    【解决方案1】:

    一个选项可能是:

    df1 %>%
        rowwise() %>%
        mutate(across(all_of(df2$Expression), ~ . * df2[match(cur_column(), df2$Expression), match(t_mode, names(df2))]))
    
      t_mode ch_value purpose   sov ownership age_16 joint atwork sov_time
      <chr>     <dbl> <chr>   <int>     <int>  <int> <int>  <int>    <dbl>
    1 SHARED     2.06 eat         0         0      0     0      0     0   
    2 SHARED     2.19 eat         0         0      0     0      0     0   
    3 WALK       2.45 eat         0         1      0     1      0     0   
    4 PAY        2.3  eat         0         0      0     0      0     0   
    5 PAY        2.09 eat         0         0      0     0      0     0   
    6 ALONE      1.82 work        0         0      0     0      0     0.03
    7 SHARED     0.2  work        0         0      0     0      0     0  
    

    【讨论】:

    • 它完成了工作,非常感谢。唯一的问题是在乘法之前我有大约 500 个变量,但是在运行这段代码之后我有超过 5000 列!列名看起来像“sov_time.WALK”,并且有很多 NA。有什么办法可以改善吗?
    猜你喜欢
    • 1970-01-01
    • 2021-07-21
    • 2023-03-05
    • 2018-05-21
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多