1

私はtxtファイル(data5.txt)を持っています:

1   0   1   0   0

1   1   1   0   0

0   0   1   0   0

1   1   1   0   1

0   0   0   0   1

0   0   1   1   1

1   0   0   0   0

1   1   1   1   1

0   1   0   0   1

1   1   0   0   0

各列の 1 と 0 の頻度を数える必要があります

1 の頻度 >= 0 の頻度の場合、その列の最後の行の後に 1 を出力します

私はRの初心者ですが、これを試してみましたが、エラーが発生しました:

Error in if (z >= d) data[n, i] = 1 else data[n, i] = 0 : 

  missing value where TRUE/FALSE needed

私のコード:

data<-read.table("data5.txt", sep="")

m =length(data)

d=length(data[,1])/2

n=length(data[,1])+1

for(i in 1:m)
{

    z=sum(data[,i])

    if (z>=d) data[n,i]=1 else data[n,i]=0
}
4

1 に答える 1

2

これを試すことができます:

rbind(df, ifelse(colSums(df == 1) >= colSums(df == 0), 1, NA))
#    V1 V2 V3 V4 V5
# 1   1  0  1  0  0
# 2   1  1  1  0  0
# 3   0  0  1  0  0
# 4   1  1  1  0  1
# 5   0  0  0  0  1
# 6   0  0  1  1  1
# 7   1  0  0  0  0
# 8   1  1  1  1  1
# 9   0  1  0  0  1
# 10  1  1  0  0  0
# 11  1  1  1 NA  1

@Arun からの素敵な提案のおかげで更新します。

rbind(df, ifelse(colSums(df == 1) >= ceiling(nrow(df)/2), 1, NA)

あるいは:

rbind(df, ifelse(colSums(df == 1) >= nrow(df)/2, 1, NA)

@SvenHohensteinに感謝します。

意図した結果を誤解した可能性があります。1 の頻度が 0 の頻度と等しくないか、0 の頻度よりも大きくない場合に 0 が必要な場合は、これで十分です。

rbind(df, colSums(df) >= nrow(df) / 2)

繰り返しますが、有益なコメントをくれた @SvenHohenstein に感謝します!

于 2013-11-10T10:39:28.827 に答える