在R中如何选择特定的单元格值/元素,使用它们执行计算并以特定格式显示它

时间:2018-05-15 18:34:56

标签: r

我有一个类似下面的调查数据集(df),其中有一组问题从Q1_Grid开始。它有三列,分别是Weight,Total&未加权基数:

 Weight     Total             Unweighted Base
Q1_Grid   Unweighted Base            10000
          Base                       10000
          A lot better [5]           1000
          A little better [4]        2000
          The same [3]               3000
          Not applicable             4000
          Don’t know                 5000
          Net: Better                9%
          Net: Worse                 12%
          Mean                       2.81
          Standard deviation         0.86
          Standard Error             -

从这个数据集中,我试图以下面的格式编写CSV输出文件:

Q1_Grid     Unweighted Base      10000
            Base                 10000
            Net: Balance         3%

输出包含问题(Q1_Grid)& Total(Unweighted Base,Base)&的前两个元素“净:更糟”的差异& “净:更好”的百分比。

我写了下面的代码,但它没有给我想要的结果。

target<-c("Net: Worse","Net: Better")
dfT2$Unweighted.Base<-as.numeric(dfT2$Unweighted.Base)
dfT2 %>%
  select("Weight","Total","Unweighted.Base")
  filter(Total %in% target)
  mutate(dfT2,"Net Balance", diff(Unweighted.Base))

我使用的软件包/库列表是:

-library(tidyverse)
-library(dplyr)

请您有其他简单的方法来获得所需的输出吗?我是R的新手,因此会感谢社区的任何帮助。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用传播并收集吗?

 dfT2 %>% 
        spread(Total,Unweighted.Base) %>% 
        select('Weight','Unweighted Base' , 'Net.Better' ,'Net.Worse') %>% 
        mutate(NetBalance = Net.Worse - Net.Better) %>%
        gather(Total, Unweighted, -(Weight))

答案 1 :(得分:-1)

如果您通过直接减去Net: Balance行获得

,该怎么办?
balance <- dfT2[dfT2$Total == "Net: Worse", "Unweighted.Base"] - dfT2[dfT2$Total == "Net: Better", "Unweighted.Base"]

然后你可以将它绑定到过滤数据框的末尾:

dfT2 %>%
    select("Weight","Total","Unweighted.Base") %>%
    filter(Total %in% target) %>%
    rbind(c("", "Net: Balance", balance))