Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用spread创建两个tidyr值列_R_Tidyr_Spread - Fatal编程技术网

使用spread创建两个tidyr值列

使用spread创建两个tidyr值列,r,tidyr,spread,R,Tidyr,Spread,我有一个数据框,看起来就像这样(见链接)。我想得到下面生成的输出,并进一步将音调变量分布在n和平均变量上。这个话题似乎与此有关,但我无法让它发挥作用: 我希望最后一个表将源变量放在一列中,然后将tone-n和tone-avg变量放在列中。所以我希望列标题是“source”-“For-n”-“反对-n”-“For-Avg”-“反对-Avg”。这是为了发表,不是为了进一步计算,所以是为了展示数据。以这种方式呈现数据对我来说似乎更直观。多谢各位 #variable1 Politician.For&l

我有一个数据框,看起来就像这样(见链接)。我想得到下面生成的输出,并进一步将音调变量分布在n和平均变量上。这个话题似乎与此有关,但我无法让它发挥作用:

我希望最后一个表将源变量放在一列中,然后将tone-n和tone-avg变量放在列中。所以我希望列标题是“source”-“For-n”-“反对-n”-“For-Avg”-“反对-Avg”。这是为了发表,不是为了进一步计算,所以是为了展示数据。以这种方式呈现数据对我来说似乎更直观。多谢各位

#variable1
Politician.For<-sample(seq(0,4,1),50, replace=TRUE)
#variable2
Politician.Against<-sample(seq(0,4,1),50, replace=TRUE)
#Variable3
Activist.For<-sample(seq(0,4,1),50,replace=TRUE)
#variable4
Activist.Against<-sample(seq(0,4,1),50,replace=TRUE)
#dataframe
df<-data.frame(Politician.For, Politician.Against, Activist.For,Activist.Against)

#tidyr
df %>%
 #Gather all columns 
 gather(df) %>%
 #separate by the period character 
 #(default separation character is non-alpha numeric characterr) 
 separate(col=df, into=c('source', 'tone')) %>%
 #group by both source and tone  
 group_by(source,tone) %>%
 #summarise to create counts and average
 summarise(n=sum(value), avg=mean(value)) %>%
 #try to spread
 spread(tone, c('n', 'value'))
#变量1
政治家,为%
#传播
传播(音调,c('n','value'))

使用
数据表
语法(谢谢@akrun):


我认为您需要的是另一个聚集,以打破计数并表示为单独的观察值,下面的
聚集(type,val,-source,-tone)

gather(df, who, value) %>%
    separate(who, into=c('source', 'tone')) %>%
    group_by(source, tone) %>%
    summarise(n=sum(value), avg=mean(value)) %>%
    gather(type, val, -source, -tone) %>%
    unite(stat, c(tone, type)) %>%
    spread(stat, val)
屈服

Source: local data frame [2 x 5]

      source Against_avg Against_n For_avg For_n
1   Activist        1.82        91    1.84    92
2 Politician        1.94        97    1.70    85

请出示所需证件output@akrun好的,谢谢你的提示!如果
dplyr
的计划不包括
dcast
melt
(起源于哈德利诗篇),似乎有点奇怪(和限制性)。也许tidyr是用来做某些事情的。我猜下一个版本的
restrape2
(?restrape3)可以解决这些问题。我更喜欢
melt(setDT(df))
,(但是有一条友好的警告消息可能会吓到人),这样我们就不需要加载
restrape2
@akrun,可以随意编辑;我对那些东西不太了解yet@Arun请随意编辑,删除我的1.9.4乱七八糟的东西。
Source: local data frame [2 x 5]

      source Against_avg Against_n For_avg For_n
1   Activist        1.82        91    1.84    92
2 Politician        1.94        97    1.70    85