将data.frame转换为R中具有多个级别的三向表

将data.frame转换为R中具有多个级别的三向表,r,contingency,R,Contingency,我想打开以下手动输入的表格,在R中作为data.frame输入,代码如下: 我尝试了xtabs和ftable,但没有成功。由于每个值都在一个唯一的类别中,您只需执行以下操作: xtabs(count ~ ., data=tab) 由于每个值都位于一个唯一的类别中,因此您只需执行以下操作: xtabs(count ~ ., data=tab) 如果希望结果是data.frames的列表,请使用软件包: library(tidyverse) tab %>% split(.$Sex) %

我想打开以下手动输入的表格,在R中作为data.frame输入,代码如下:


我尝试了
xtabs
ftable
,但没有成功。

由于每个值都在一个唯一的类别中,您只需执行以下操作:

xtabs(count ~ ., data=tab)

由于每个值都位于一个唯一的类别中,因此您只需执行以下操作:

xtabs(count ~ ., data=tab)

如果希望结果是data.frames的列表,请使用软件包:

library(tidyverse)
tab %>%
  split(.$Sex) %>%
  purrr::map(tidyr::spread, Eye, count)
#> $Male
#>    Hair  Sex Brown Blue Hazel Green
#> 1 Black Male    32   11    10     3
#> 2 Brown Male    53   50    25    15
#> 3   Red Male    10   10     7     7
#> 4 Blond Male     3   30     5     8
#> 
#> $Female
#>    Hair    Sex Brown Blue Hazel Green
#> 1 Black Female    36    9     5     2
#> 2 Brown Female    66   34    29    14
#> 3   Red Female    16    7     7     7
#> 4 Blond Female     4   64     5     8

如果希望结果是data.frames的列表,请使用软件包:

library(tidyverse)
tab %>%
  split(.$Sex) %>%
  purrr::map(tidyr::spread, Eye, count)
#> $Male
#>    Hair  Sex Brown Blue Hazel Green
#> 1 Black Male    32   11    10     3
#> 2 Brown Male    53   50    25    15
#> 3   Red Male    10   10     7     7
#> 4 Blond Male     3   30     5     8
#> 
#> $Female
#>    Hair    Sex Brown Blue Hazel Green
#> 1 Black Female    36    9     5     2
#> 2 Brown Female    66   34    29    14
#> 3   Red Female    16    7     7     7
#> 4 Blond Female     4   64     5     8

base R
选项是
tapply

tapply(tab[,'count'], tab[1:3], FUN = I)
或者我们可以使用
dcast

library(data.table)
setDT(tab)[, list(list(dcast(.SD, Hair ~Eye))), Sex]$V1

或者,最好使用二维数据

dcast(setDT(tab), Hair + Sex ~Eye)

base R
选项是
tapply

tapply(tab[,'count'], tab[1:3], FUN = I)
或者我们可以使用
dcast

library(data.table)
setDT(tab)[, list(list(dcast(.SD, Hair ~Eye))), Sex]$V1

或者,最好使用二维数据

dcast(setDT(tab), Hair + Sex ~Eye)

xtabs(count~,data=tab)
不是吗?@latemail相当简洁,但很有效。把它作为一些问题的答案发布…
xtabs(count~,data=tab)
不是吗?@latemail相当简洁,但很有效。将其作为一些问题的答案发布。。。