将data.frame转换为R中具有多个级别的三向表
我想打开以下手动输入的表格,在R中作为data.frame输入,代码如下:将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) %
我尝试了
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相当简洁,但很有效。将其作为一些问题的答案发布。。。