获取R中两个元素的组合

时间:2019-12-25 20:37:12

标签: r

我需要找到两个具有两个水平的因子之间的所有组合

性别:男女 种族:白非白

我希望输出为: 男白 女白 男性非白色 女非白人

2 个答案:

答案 0 :(得分:4)

我们可以使用outerpaste

c(outer(levels(df1$Sex), levels(df1$Race), FUN = paste, sep="-"))
#[1] "Female-Nonwhite" "Male-Nonwhite"   "Female-White"    "Male-White" 

或与expand.grid

do.call(paste, c(expand.grid(lapply(df1[c("Sex", "Race")], levels)), sep="_"))
#[1] "Female_Nonwhite" "Male_Nonwhite"   "Female_White"    "Male_White"  

或使用reppaste

paste(rep(levels(df1$Sex), each = length(levels(df1$Race))), levels(df1$Race), sep="_")
#[1] "Female_Nonwhite" "Female_White"    "Male_Nonwhite"   "Male_White"     

数据

df1 <- data.frame(Sex = sample(c("Male", "Female"), 10, replace = TRUE),
        Race = sample(c("White", "Nonwhite"), 10, replace = TRUE))

答案 1 :(得分:2)

当我阅读请求时,我认为可以用几种方法来解释它,而您真正想要的是将这些组合制成表格。有两种方法。使用@akruns示例:

set.seed(123)
df1 <- data.frame(Sex = sample(c("Male", "Female"), 10, replace = TRUE),
    Race = sample(c("White", "Nonwhite"), 10, replace = TRUE))
with( df1, as.matrix(  # this results in a vertical arrangement
                 table( # this does the counting
                    interaction(Sex, Race, sep=" - ") 
                #`interaction()` creates a variable to be tabulated for each line
        ) ) )
#-------------------

                  [,1]
Female - Nonwhite    1
Male - Nonwhite      4
Female - White       3
Male - White         2

顺序将取决于级别。默认情况下,它们是字母顺序的,但可以控制。

我还考虑过使用xtabs,如果表格总数已经在数据中,并且您希望将它们排列在列联矩阵中,这将特别有用。

相关问题