2016-09-29 100 views
0

我有要由列值中的一个到子集的数据帧,然后我想运行卡方在每个新子集。- [R子集数据帧和运行的功能上的每个子集

我读到Subsetting a data frame into multiple data frames based on multiple column values这表明我如何子集数据帧的问题。我用的代码变种建议有:

split(SpellingVars, with(SpellingVars, interaction(Headword)), drop = TRUE) 

与我的数据的工作,但什么话,我想知道的是如何重用这些子集这样:

  • 我怎么运行的函数在每个新的子集?

我的数据是这样的:

  SPELLING VARS DATA SET  
    Headword Variant Freq1 Freq2 
    Knight  Kniht  17  22 
    Knight  Knyhht 28  12 
    Knight  Knyt  6  7 
    Sword  Sword  7  8 
    Sword  Swerd  14  44 

所以我想为剑的一个子集,以及一个用于骑士,我想运行卡方在每个子集。但我不知道该怎么做。

我试图做这自己,但没有成功。我一直在尝试使用的代码是关于答案的子集的问题,我连接到上面的变体:

chisq.test(split(SpellingVars, with(SpellingVars, interaction(Headword)), drop = TRUE))

然而,这提供了错误(list) object cannot be coerced to type 'double'。我有点不知所措,我会很感激任何建议!

+2

使用'lapply' dataframes的名单上。 https://stat.ethz.ch/R-manual/R-devel/library/base/html/lapply.html – Wietze314

+0

我认为'dplyr'包会有所帮助。如果您制作了一个示例数据集,我会做一个解释如何的答案。 –

回答

1

使用lapply做一个函数在dataframes列表:

SpellingVars <- data.frame(Headword= c('Knight','Knight','Knight','Sword','Sword') 
      ,Variant= c('Kniht', 'Knyhht', 'Knyt', 'Sword', 'Swerd') 
      ,Freq1 = c(17,28,6,7,14) 
      ,Freq2 = c(22,12,7,8,44)) 


sp <- split(SpellingVars, with(SpellingVars, interaction(Headword)), drop = TRUE) 

lapply(sp, function(x){chisq.test(x$Freq1, x$Freq2)}) 
+0

感谢您演示如何做到这一点 - 它完美的工作! – Rose