2

私は 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
4

2 に答える 2