R:有条件地应用具有排除值的子集

时间:2018-04-05 20:55:17

标签: r subset apply

以下是R中的数据示例。在A has an assigned letter in列B , and an assigned value in列C . I want to add a列D that records a ratio for each observation in列A`的列中的每个观察。以下是观察比率的示例计算" 1"。

对于&#34; 1&#34;的每次观察,我想计算出现在表格中的所有 x,但未分配给&#34; 1&#34 ;。在这种情况下,计数为2,因为有两个X分配给观察&#34; 3&#34;。除了上述条件之外,我还想计算X&#39; s - 未分配给观察&#34; 1&#34; - 在<{>>值大于6 在{ {1}}。计数为1,因为两个X中的一个分配给&#34; 3&#34; column C中的值大于6。因此,在column C中,每个观察的比例&#34; 1&#34; 1比2:1/2。

我也想为column D中的Y做。

column B

我希望结果表看起来像这样:

data_table
Column A   Column B  Column C
 1           X         7
 1           X         8
 1           X         3
 1           X         3
 2           Y         3
 2           Y         8
 3           X         5
 3           X         7
 4           Y         6
 4           Y         7
 4           Y         8

以下是我到目前为止提出的代码,但对于Column A Column B Column C Column D 1 X 7 1/2 #There are two x's assigned to "3", and one of which has a value greater than 6 in column C. 1 X 8 1/2 1 X 3 1/2 1 X 3 1/2 2 Y 3 2/3 2 Y 8 2/3 3 X 5 2/4 3 X 7 2/4 4 Y 6 1/2 4 Y 7 1/2 4 Y 8 1/2 中的每个观察,我都无法生成column A个跳过X分配给的计数观察

nrow

有关如何修改此内容以在计算X值大于6的X的比例时从特定观察( final_df %>% group_by(column_B) %>% mutate(ratio = nrow(filter(final_df, column_C>6))/nrow(final_df)) )中排除X的任何建议({{1} }})

谢谢!

1 个答案:

答案 0 :(得分:0)

这样简单的事情怎么样?

## Simulate some data
id1 <- rep(round(runif(250, 0,1)*100000000),each=4)
id2 <- rep(round(runif(50, 0,1)*100000000),each=4)
id2 <- rep(id2, each=5)
value <- rnorm(1000, mean=6, sd=2)
df <- data.frame(id1, id2, value)

## Calculate using a loop
output <- data.frame(id1, id2, prop=NA)
output <- output[!duplicated(output),]
for(i in 1:nrow(output)){
    gt6 <- sum(df$value[df$id2!=output$id2[i]]>6)
    tot <- sum(df$id2!=output$id2[i])
    output$prop[i] <- gt6/tot
}