1

欠損値 (NA) を含む p.value の異なる値を持つデータ フレームがあります: pvalue2=pvalue[1:679,3:10] そして、それを分析する必要があり、0.05 より大きい数値は「通常」と書く必要があります。 e 値が 0.05 未満の場合、値を書き込む必要があります。結果を別のデータ フレームに書き込みたい。これは私のコードです:

a=data.frame()
    for (i in 1:nrow(pvalue2)) {
      for (j in 1:ncol(pvalue2)){
        if (pvalue2[i,j] >=0.05) {
          print (a[i,j]=="Normal")
        } else {print a[i,j]==pvalue2[i,j] }
      }
    } 

誰かが私を助けてくれますか?

4

4 に答える 4

2
a <- ifelse(as.matrix(pvalue2) < .05, as.matrix(pvalue2), "normal")
a <- as.data.frame(a)

R はコンパイルされていない高水準言語であるため、forループが大きくなると非常に遅くなる傾向があります。代わりにベクトル化された関数 (低レベル言語で内部的にループを行う) を使用することで、コードを高速化し、読みやすくします。

実行例

> set.seed(123)
> pvalue2 <- matrix(runif(18)/10, 6, 3)
> pvalue2[sample(length(pvalue2), 4)] <- NA
> pvalue2 <- as.data.frame(pvalue2)
> pvalue2

          V1         V2          V3
1 0.02875775 0.05281055 0.067757064
2 0.07883051 0.08924190 0.057263340
3 0.04089769 0.05514350          NA
4 0.08830174 0.04566147 0.089982497
5 0.09404673         NA          NA
6         NA 0.04533342 0.004205953

> ifelse(as.matrix(pvalue2) < .05, as.matrix(pvalue2), "normal")

     V1                   V2                   V3                   
[1,] "0.0287577520124614" "normal"             "normal"             
[2,] "normal"             "normal"             "normal"             
[3,] "0.04089769218117"   "normal"             NA                   
[4,] "normal"             "0.0456614735303447" "normal"             
[5,] "normal"             NA                   NA                   
[6,] NA                   "0.0453334156190977" "0.00420595335308462"
于 2013-02-22T11:58:33.880 に答える
1

あなたのp値は因子として保存されていると思います。最初に数値に変換する必要があります。

tmp <- sapply(pvalue2, function(x) as.numeric(as.character(x)))

これで、オブジェクトtmpを使用できます。

# copy the existing data frame to a new object
df2 <- pvalue2
# fill it with "Normal"
df2[ , ] <- "Normal"
# replace with values from tmp if value < 0.05
df2[tmp < 0.05] <- pvalue2[tmp < 0.05]
于 2013-02-22T12:05:06.843 に答える
0

最初のデータフレームが df と呼ばれると仮定します

df_2<-data.frame(matrix(nrow=nrow(df),ncol=ncol(df)));
for (i in 1:ncol(df)){
    df_2[,i]<-ifelse(is.na(df[,i]) == FALSE && df[,i] >= .05,"Normal",ifelse(is.na(df[,i])==FALSE && df[,i] < 0.05,df[,i],NA))
}
于 2013-02-22T11:33:43.107 に答える