首页 > 解决方案 > 在 R 中使用列名并汇总

问题描述

我想在我的数据中计算一些汇总值。数据框中有趣的列被命名exppw...._1003pw...._1003其中....代表例如05060607等等。列exppw...._1003中的数据来自实验,而列pw...._1003中的数据来自我们的“标准程序”。

我想比较两个对应列的汇总值,例如pw0708_1003exppw0708_1003

rt2020_2 %>% 
  select(id_intern, persGew, matches("exppw...._1003"), matches("pw...._1003")) %>% 
  summarise(across(starts_with("pw"), 
               list(
                 gewSum = ~ sum(persGew)/1e5, 
                 uWHK = ~ n_distinct(id_intern[.x > 0]),
                 uWHKExp = ~ n_distinct(id_intern[(paste0("exp", cur_column()))>0])
              )
  ))

我希望你能认出我打算在这里做什么。我取以“pw”开头的列并计算值> 0的不同情况。我现在的问题是,我在学期中的情况id_intern[(paste0("exp", cur_column()))>0]并没有像我希望的那样工作,即它总是产生真实的结果。我试图取消引用paste0("exppw", cur_column()),使其显示为:

rt2020_2 %>% 
  select(id_intern, persGew, ges, matches("exppw...._1003"), matches("pw...._1003")) %>% 
  summarise(across(starts_with("pw"), 
               list(
                 gewSum = ~ sum(persGew)/1e5, 
                 uWHK = ~ n_distinct(id_intern[.x > 0]),
                 uWHKExp = ~ n_distinct(id_intern[!!(paste0("exp", cur_column()))>0])
              )
  ))

但这会导致错误:

Error: `cur_column()` must only be used inside `across()`.

你能帮助我吗?还是有更好的方法来解决我的问题?谢谢你的帮助。

标签: rdplyr

解决方案


几个问题。目前尚不清楚您在 gewSum 中想要什么。是 sum(persGew) 还是所有以 pw 开头的列的总和?uWHK 等也是如此。 pw 列或 id_intern 列中的内容是不同的计数吗?

[ ]此外,在摘要中使用也不是一个好主意。可能更好地mutate创建一些列来检查您的标准。


推荐阅读