【发布时间】:2013-09-30 12:51:35
【问题描述】:
我有一个 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
【问题讨论】:
标签: r dataframe data.table