Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.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
如何在R中融化或重塑装箱数据?_R_Aggregate_Reshape_Melt - Fatal编程技术网

如何在R中融化或重塑装箱数据?

如何在R中融化或重塑装箱数据?,r,aggregate,reshape,melt,R,Aggregate,Reshape,Melt,我收集了反映各大洲河流宽度的数据。下面是一个示例数据集。我只是想把数据转换成我所展示的形式 dat <- read.table(text = "width continent bin 5.32 Africa 10 6.38 Africa 10 10.80 Asia 20

我收集了反映各大洲河流宽度的数据。下面是一个示例数据集。我只是想把数据转换成我所展示的形式

 dat <- read.table(text =    
                      "width continent bin
                      5.32     Africa  10
                      6.38     Africa  10
                      10.80    Asia    20
                      9.45     Africa  10
                      22.66    Africa  30
                      9.45     Asia    10",header = TRUE)

我们可以按组使用聚合中的任意一个

data.table
选项将“data.frame”转换为“data.table”(
setDT(dat)
),按“大陆”和“bin”变量分组,我们得到每组的元素数(.
N

或者使用类似的选项对变量进行分组,然后使用
n()
而不是
.n
来获取计数

 library(dplyr)
 dat %>%
      group_by(continent, bin) %>%
      summarise(Count=n())
或者我们可以使用
base R
中的
aggregate
,并使用公式方法,得到
长度

 aggregate(cbind(Count=width)~., dat, FUN=length)
 #   continent bin Count
 #1    Africa  10     3
 #2      Asia  10     1
 #3      Asia  20     1
 #4    Africa  30     1
根据@Frank和@David Arenburg的评论,使用
data.table
dplyr
提供了一些附加选项。我们将数据集转换为
data.table
setDT(dat)
),使用
dcast
转换为“宽”格式,然后使用
melt
将其重新转换回“长”格式,并将roww子集(
value>0

使用
dplyr中的
count

 library(dplyr)
 count(dat, bin, continent)

我们可以按组使用聚合中的任意一个

data.table
选项将“data.frame”转换为“data.table”(
setDT(dat)
),按“大陆”和“bin”变量分组,我们得到每组的元素数(.
N

或者使用类似的选项对变量进行分组,然后使用
n()
而不是
.n
来获取计数

 library(dplyr)
 dat %>%
      group_by(continent, bin) %>%
      summarise(Count=n())
或者我们可以使用
base R
中的
aggregate
,并使用公式方法,得到
长度

 aggregate(cbind(Count=width)~., dat, FUN=length)
 #   continent bin Count
 #1    Africa  10     3
 #2      Asia  10     1
 #3      Asia  20     1
 #4    Africa  30     1
根据@Frank和@David Arenburg的评论,使用
data.table
dplyr
提供了一些附加选项。我们将数据集转换为
data.table
setDT(dat)
),使用
dcast
转换为“宽”格式,然后使用
melt
将其重新转换回“长”格式,并将roww子集(
value>0

使用
dplyr中的
count

 library(dplyr)
 count(dat, bin, continent)

使用
sqldf

library(sqldf)
sqldf("SELECT bin, continent, COUNT(continent) AS count 
      FROM dat 
      GROUP BY bin, continent")
输出:

  bin continent count
1  10    Africa     3
2  10      Asia     1
3  20      Asia     1
4  30    Africa     1

使用
sqldf

library(sqldf)
sqldf("SELECT bin, continent, COUNT(continent) AS count 
      FROM dat 
      GROUP BY bin, continent")
输出:

  bin continent count
1  10    Africa     3
2  10      Asia     1
3  20      Asia     1
4  30    Africa     1

您可以添加
sqldf
@akrun再次感谢您您可以添加
sqldf
@akrun再次感谢您,以便使用
melt
,如标题中所述:
setDT(melt(dcast(dat,constance~bin))[value>0]
还可以添加
count(dat,bin,constandard)
为了使用
melt
如标题所述:
setDT(melt(dcast(dat,大洲~bin)))[value>0]
计数(dat,大洲~bin)