我有一个类似下面的调查数据集(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的新手,因此会感谢社区的任何帮助。
答案 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))