3

次のようなデータ フレームがあるとします。

Class  Sex  Score
A      M    90
A      F    90
A      F    85
A      M    85
A      M    80
A      M    70
A      F    70
A      M    60
B      F    90
B      M    90
B      M    75
B      F    70

クラスと性別を選択して平均を求める単一のメニューが必要です。現在、実際のデータ フレームで 2 つのメニューを使用しています

i <- menu(c("A","B"), graphics=TRUE, title="Choose class")
j <- menu(c("M","F"), graphics=TRUE, title="Choose sex")
df.1 <- df.1[df.1$Class==i, ]
df.1 <- df.1[df.1$Sex==j, ]

しかし、単なる変数以外にも多くの変数があり、それらがすべて 1 つのウィンドウで選択できるのに、複数のメニューをクリックするのが煩わしいClassSex思われる場合。これは可能Rですか?

4

2 に答える 2

2

これは変更できますが、基本的な考え方は、表示されるすべてのオプションの交差を作成し、単一のメニューを使用することです。

dat <- read.table(textConnection("Class  Sex  Score
A      M    90
A      F    90
A      F    85
A      M    85
A      M    80
A      M    70
A      F    70
A      M    60
B      F    90
B      M    90
B      M    75
B      F    70
"), header = TRUE)

vals <- interaction(dat$Class, dat$Sex)
opts <- as.character(unique(vals))
choice <- menu(opts, graphics = TRUE, title = "Choose Class.Sex")
dat[vals == opts[choice],]

これがそのアイデアを関数にまとめたものです

# data - dataset to subset
# cols - either character vector with names of the columns
#        or numeric vector with column numbers
# graphics - logical. Should the menu be graphical?
subsetMenu <- function(data, cols, graphics = TRUE){
    if(is.numeric(cols)){
        colnames <- colnames(data)[cols]
    }else{
        colnames <- cols
    }

    vals <- interaction(data[,cols])
    opts <- as.character(unique(vals))
    title <- paste("Choose", paste0(colnames, collapse = "."))

    choice <- menu(opts, graphics = graphics, title = title)
    data[vals == opts[choice],]
}

df1 <- subsetMenu(dat, c("Class", "Sex"), graphics = T)
df2 <- subsetMenu(dat, c("Class", "Sex"), graphics = F)
df3 <- subsetMenu(dat, 1:2)
df4 <- subsetMetu(mtcars, c("cyl", "gear"))
于 2013-05-12T23:55:37.097 に答える