R 函数抛出一个错误

R 函数抛出一个错误,r,syntax-error,spread,R,Syntax Error,Spread,我尝试在tidyverse包中使用聚集和扩散函数,但它在扩散函数中抛出了一个错误 图书馆(插入符号) dataset我们可以用data.table library(data.table) dcast(melt(setDT(dataset, keep.rownames = TRUE), id.var = c("rn", "Species")), rn + Species ~ variable) 我们可以使用data.table library(data.table) dcast(melt(set

我尝试在tidyverse包中使用聚集和扩散函数,但它在扩散函数中抛出了一个错误

图书馆(插入符号)


dataset我们可以用
data.table

library(data.table)
dcast(melt(setDT(dataset, keep.rownames = TRUE), id.var = c("rn", "Species")), rn + Species ~ variable)

我们可以使用
data.table

library(data.table)
dcast(melt(setDT(dataset, keep.rownames = TRUE), id.var = c("rn", "Species")), rn + Species ~ variable)

后来添加:抱歉@alistaire,在发布此回复后才看到您对原始帖子的评论

据我所知,
错误:行的标识符重复…
,当您的值具有相同的标识符时,就会发生此错误。例如,在原始的“iris”数据集中,前五行物种=刚毛都有一个花瓣。宽度为0.2,三行
花瓣。长度
的值为1.4。收集这些数据不是问题,但是当您尝试传播它们时,函数不知道什么属于什么。也就是说,0.2瓣宽和1.4瓣长属于哪一行刚毛

在这些情况下,我使用的(tidyverse)解决方案是在收集阶段为每一行数据创建一个唯一的标记,以便该函数可以跟踪哪些重复数据属于哪些行(当您希望再次传播时)。见下例:


#加载包
图书馆(dplyr)
图书馆(tidyr)
#获取数据
数据集萼片。长度萼片。宽度花瓣。长度花瓣。宽度种类
#>1 5.1 3.5 1.4 0.2刚毛
#>2 4.9 3.0 1.4 0.2刚毛
#>3 4.7 3.2 1.3 0.2刚毛
#>4.6 3.1 1.5 0.2刚毛
#>5.0 3.6 1.4 0.2刚毛
#>6 5.4 3.9 1.7 0.4刚毛
#收集数据
数据集_已收集%
#为每行创建一个唯一标识符
突变(标记=行数(物种))%>%
#收集数据
聚集(键=类型,值=值,1:4)
#查看收集的数据
总目(收集的数据集)
#>物种标记类型值
#>1刚毛1萼片长度5.1
#>2刚毛2萼片长度4.9
#>3刚毛3萼片长度4.7
#>4刚毛4萼片长度4.6
#>5刚毛5萼片长5.0
#>6刚毛6萼片长度5.4
#再把它摊开
数据集\u价差%
#按标记对数据进行分组
分组依据(标记)%>%
#再把它摊开
排列(键=类型,值=值)%>%
#不是必需的,但删除标记
解组()%>%
选择(-marker)
#查看排列数据
头部(数据集和U排列)
#>#tibble:6 x 5
#>种花瓣。长花瓣。宽萼片。长萼片。宽
#>                                  
#>1 setosa 1.4 0.2 5.1 3.5
#>2 setosa 1.4 0.2 4.9 3.0
#>3 setosa 1.3 0.2 4.7 3.2
#>4 setosa 1.5 0.2 4.6 3.1
#>5 setosa 1.4 0.2 5.0 3.6
#>6 setosa 1.7 0.4 5.4 3.9

(一如既往,感谢Jenny Bryan提供的
reprex
软件包)

后来补充道:抱歉@alistaire,在发布此回复后才看到您对原始帖子的评论

据我所知,
错误:行的标识符重复…
,当您的值具有相同的标识符时,就会发生此错误。例如,在原始的“iris”数据集中,前五行物种=刚毛都有一个花瓣。宽度为0.2,三行
花瓣。长度
的值为1.4。收集这些数据不是问题,但是当您尝试传播它们时,函数不知道什么属于什么。也就是说,0.2瓣宽和1.4瓣长属于哪一行刚毛

在这些情况下,我使用的(tidyverse)解决方案是在收集阶段为每一行数据创建一个唯一的标记,以便该函数可以跟踪哪些重复数据属于哪些行(当您希望再次传播时)。见下例:


#加载包
图书馆(dplyr)
图书馆(tidyr)
#获取数据
数据集萼片。长度萼片。宽度花瓣。长度花瓣。宽度种类
#>1 5.1 3.5 1.4 0.2刚毛
#>2 4.9 3.0 1.4 0.2刚毛
#>3 4.7 3.2 1.3 0.2刚毛
#>4.6 3.1 1.5 0.2刚毛
#>5.0 3.6 1.4 0.2刚毛
#>6 5.4 3.9 1.7 0.4刚毛
#收集数据
数据集_已收集%
#为每行创建一个唯一标识符
突变(标记=行数(物种))%>%
#收集数据
聚集(键=类型,值=值,1:4)
#查看收集的数据
总目(收集的数据集)
#>物种标记类型值
#>1刚毛1萼片长度5.1
#>2刚毛2萼片长度4.9
#>3刚毛3萼片长度4.7
#>4刚毛4萼片长度4.6
#>5刚毛5萼片长5.0
#>6刚毛6萼片长度5.4
#再把它摊开
数据集\u价差%
#按标记对数据进行分组
分组依据(标记)%>%
#再把它摊开
排列(键=类型,值=值)%>%
#不是必需的,但删除标记
解组()%>%
选择(-marker)
#查看排列数据
头部(数据集和U排列)
#>#tibble:6 x 5
#>种花瓣。长花瓣。宽萼片。长萼片。宽
#>                                  
#>1 setosa 1.4 0.2 5.1 3.5
#>2 setosa 1.4 0.2 4.9 3.0
#>3 setosa 1.3 0.2 4.7 3.2
#>4 setosa 1.5 0.2 4.6 3.1
#>5 setosa 1.4 0.2 5.0 3.6
#>6 setosa 1.7 0.4 5.4 3.9

(一如既往,感谢Jenny Bryan提供的
reprex
软件包)

使用
gather
后,您没有唯一标识符,因此无法使用
spread
library(data.table)
dcast(melt(setDT(dataset, keep.rownames = TRUE), id.var = c("rn", "Species")), rn + Species ~ variable)