以下是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} }})
谢谢!
答案 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
}