私は data.frame, dim = 400 行と 15000 列を持っています。df$Group
で定義された各グループに属する行について、グループの行の 50% 以上に値があるかどうかを確認する必要があるという条件を適用したいと思います。はいの場合は既存の値を保持し、そうでない場合はすべてを に置き換えます0
。
たとえば、グループ a のdf[1:6,1]
場合
if sum(df[1:6,1] == 0)/length(df[1:6,1]) >50%
、 のすべての値はdf[1:6,1]
に置き換えられ0
ます。それ以外の場合は、既存の値が残ります。
サンプル入力:
df <- read.table(text= "DATA r1 r2 r3 Group
a1 6835 256 0 a
a2 5395 0 67 a
a3 7746 0 30 a
a4 7496 556 50 a
a5 5780 255 0 a
a6 6060 603 0 a
b1 0 0 0 b
b2 0 258 0 b
b3 0 0 0 b
b4 0 0 0 b
b5 5099 505 0 b
b6 0 680 0 b
c1 8443 4900 280 c
c2 8980 4949 0 c
c3 7828 0 0 c
c4 6509 3257 0 c
c5 6563 0 49 c
", header=TRUE, na.strings=NA,row.name=1)
dt <- as.data.table(df) #or data.frame
期待される出力:
>df
DATA r1 r2 r3 Group
a1 6835 256 0 a
a2 5395 0 67 a
a3 7746 0 30 a
a4 7496 556 50 a
a5 5780 255 0 a
a6 6060 603 0 a
b1 0 0 0 b
b2 0 258 0 b
b3 0 0 0 b
b4 0 0 0 b
b5 0 505 0 b
b6 0 680 0 b
c1 8443 4900 0 c
c2 8980 4949 0 c
c3 7828 0 0 c
c4 6509 3257 0 c
c5 6563 0 0 c