在 R 中划分给定子数据中的所有可能行
Dividing all possible rows within a given sub-data in R
我的数据是这样的:
set <- c(1,1,1,2,2,3,3,3,3,3,4,4)
density <- c(1,3,3,1,3,1,1,1,3,3,1,3)
counts <- c(100,2,4,76,33,12,44,13,54,36,65,1)
data <- data.frame(set,density,counts)
data$set <- as.factor(data$set)
data$density <- as.factor(data$density)
在给定的集合中,有两个级别的密度“1”或“3”。对于给定的集合,我想划分所有可能的密度“1”和密度“3”的组合。然后我想打印与密度“1”相关的原始密度、比率和集合
例如,前几行的结果应如下所示:
set counts ratio
1 100 50 #100/2
1 100 25 #100/4
2 76 2.3 #76/33
3 12 0.22 #12/54
3 12 0.33 #12/36
3 44 0.8148 #44/54
...
我以为我可以通过 dplyr 实现它..但是对于 dplyr 来说它似乎有点太复杂了。
看起来这些评论让您了解了大部分内容。这是 dplyr
解决方案。 left_join
每个 density1 都与同一组中的所有 density3 匹配,提供符合您的规范的输出。
# Edited below to use dplyr syntax; my base syntax had a typo
library(dplyr)
data_combined <- data %>% filter(density == 1) %>%
# Match each 1 w/ each 3 in the set
left_join(data %>% filter(density == 3), by = "set") %>%
mutate(ratio = counts.x / counts.y) %>%
select(set, counts.x, counts.y, ratio)
data_combined
# set counts.x counts.y ratio
#1 1 100 2 50.0000000
#2 1 100 4 25.0000000
#3 2 76 33 2.3030303
#4 3 12 54 0.2222222
#5 3 12 36 0.3333333
#6 3 44 54 0.8148148
#7 3 44 36 1.2222222
#8 3 13 54 0.2407407
#9 3 13 36 0.3611111
#10 4 65 1 65.0000000
我的数据是这样的:
set <- c(1,1,1,2,2,3,3,3,3,3,4,4)
density <- c(1,3,3,1,3,1,1,1,3,3,1,3)
counts <- c(100,2,4,76,33,12,44,13,54,36,65,1)
data <- data.frame(set,density,counts)
data$set <- as.factor(data$set)
data$density <- as.factor(data$density)
在给定的集合中,有两个级别的密度“1”或“3”。对于给定的集合,我想划分所有可能的密度“1”和密度“3”的组合。然后我想打印与密度“1”相关的原始密度、比率和集合
例如,前几行的结果应如下所示:
set counts ratio
1 100 50 #100/2
1 100 25 #100/4
2 76 2.3 #76/33
3 12 0.22 #12/54
3 12 0.33 #12/36
3 44 0.8148 #44/54
...
我以为我可以通过 dplyr 实现它..但是对于 dplyr 来说它似乎有点太复杂了。
看起来这些评论让您了解了大部分内容。这是 dplyr
解决方案。 left_join
每个 density1 都与同一组中的所有 density3 匹配,提供符合您的规范的输出。
# Edited below to use dplyr syntax; my base syntax had a typo
library(dplyr)
data_combined <- data %>% filter(density == 1) %>%
# Match each 1 w/ each 3 in the set
left_join(data %>% filter(density == 3), by = "set") %>%
mutate(ratio = counts.x / counts.y) %>%
select(set, counts.x, counts.y, ratio)
data_combined
# set counts.x counts.y ratio
#1 1 100 2 50.0000000
#2 1 100 4 25.0000000
#3 2 76 33 2.3030303
#4 3 12 54 0.2222222
#5 3 12 36 0.3333333
#6 3 44 54 0.8148148
#7 3 44 36 1.2222222
#8 3 13 54 0.2407407
#9 3 13 36 0.3611111
#10 4 65 1 65.0000000