1

この質問は、 thelatemailからの素敵な小さな関数を使用して、ここで受け取った返信に関連しています。私が使用しているデータフレームは最適ではありませんが、それは私が持っているものであり、すべての行でこの関数をループしようとしています。

これは私のDFです

dput(SO_Example_v1)
structure(list(Type = structure(c(3L, 1L, 2L), .Label = c("Community", 
"Contaminant", "Healthcare"), class = "factor"), hosp1_WoundAssocType = c(464L, 
285L, 24L), hosp1_BloodAssocType = c(73L, 40L, 26L), hosp1_UrineAssocType = c(75L, 
37L, 18L), hosp1_RespAssocType = c(137L, 77L, 2L), hosp1_CathAssocType = c(80L, 
34L, 24L), hosp2_WoundAssocType = c(171L, 115L, 17L), hosp2_BloodAssocType = c(127L, 
62L, 12L), hosp2_UrineAssocType = c(50L, 29L, 6L), hosp2_RespAssocType = c(135L, 
142L, 6L), hosp2_CathAssocType = c(95L, 24L, 12L)), .Names = c("Type", 
"hosp1_WoundAssocType", "hosp1_BloodAssocType", "hosp1_UrineAssocType", 
"hosp1_RespAssocType", "hosp1_CathAssocType", "hosp2_WoundAssocType", 
"hosp2_BloodAssocType", "hosp2_UrineAssocType", "hosp2_RespAssocType", 
"hosp2_CathAssocType"), class = "data.frame", row.names = c(NA, 
-3L))
####################
#what it looks like#
####################
require(dplyr)
df <- tbl_df(SO_Example_v1)
head(df)
         Type hosp1_WoundAssocType hosp1_BloodAssocType hosp1_UrineAssocType
1  Healthcare                  464                   73                   75
2   Community                  285                   40                   37
3 Contaminant                   24                   26                   18
Variables not shown: hosp1_RespAssocType (int), hosp1_CathAssocType (int), hosp2_WoundAssocType
  (int), hosp2_BloodAssocType (int), hosp2_UrineAssocType (int), hosp2_RespAssocType (int),
  hosp2_CathAssocType (int)

chisq.test私が持っている機能は、 のすべてのカテゴリにわたって実行することdf$Typeです。理想的には、細胞数が 5 未満の場合、関数は a に切り替える必要がありfisher.test()ますが、それは別の問題です (ただし、それを行う方法を思いついた人には追加のブラウニー ポイントがあります)。

これは、行ごとに移動するために使用している関数です

func <- Map(
  function(x,y) {
    out <- cbind(x,y)
    final <- rbind(out[1,],colSums(out[2:3,]))
    chisq <- chisq.test(final,correct=FALSE)
    chisq$p.value
  },
  SO_Example_v1[grepl("^hosp1",names(SO_Example_v1))],
  SO_Example_v1[grepl("^hosp2",names(SO_Example_v1))] 
)
func

しかし、理想的には、私はそれがこのようなものであることを望んでいます

for(i in 1:nrow(df)){func}

しかし、それはうまくいきません。さらなるフックは、たとえば行 2 が取得されると、final呼び出しが次のようになることです。

func <- Map(
  function(x,y) {
    out <- cbind(x,y)
    final <- rbind(out[2,],colSums(out[c(1,3),]))
    chisq <- chisq.test(final,correct=FALSE)
    chisq$p.value
  },
  SO_Example_v1[grepl("^hosp1",names(SO_Example_v1))],
  SO_Example_v1[grepl("^hosp2",names(SO_Example_v1))] 
)
func

そのため、関数は、取得するセル数をout[x,]から除外する必要があることを理解する必要がありcolSums()ます。これdata.frameは3行しかないので簡単ですが、この関数を200行以上で構成される別のdata.frameに適用しようとしたので、これを何らかの方法でループできるといいでしょう。

どんな助けでも感謝します。

乾杯

4

1 に答える 1