下面是我在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"比率的计算示例。
对于"1"的每个观察结果,我想计算表中出现但未分配给"1"的所有x。在本例中,计数为 2,因为有两个 X 分配给观察值"3"。除了上述条件之外,我还想计算 X(未分配给观察值"1")的值大于6column C
。计数为 1,因为分配给"3"的两个 X 中的一个在column C
中的值大于 6。因此,在column D
中,每个观测值"1"的比率是1比2:1/2。
我也想为column B
的Y做事。
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
计数。
final_df %>% group_by(column_B) %>%
mutate(ratio = nrow(filter(final_df, column_C>6))/nrow(final_df))
关于我如何修改它以将 X 从特定观察值 (column A
) 中排除 X 以计算值大于 6 的比例的任何建议(column C
)谢谢!
像这样简单的事情怎么样?
## 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
}