我有一个数据框,我想通过其中一个列值进行子集化,然后我想在每个新子集上运行chi平方。
我阅读了关于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
所以我想要一个Sword的子集,一个Knight的子集,我想在每个子集上运行chi平方。但我不知道该怎么做。
我自己试图这样做,但没有成功。我试图使用的代码是我上面链接的Subsetting问题答案的变体:
chisq.test(split(SpellingVars, with(SpellingVars, interaction(Headword)), drop = TRUE))
但是,这会产生错误(list) object cannot be coerced to type 'double'
。我有点失落,我很感激任何建议!
答案 0 :(得分:1)
使用lapply在数据帧列表上执行函数:
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)})