我有一个名为" test"的数据帧。像这样:
group v x
1 a 110 114
2 a 90 150
3 c 57 100
4 d 53 98
5 e 114 67
6 f 143 126
7 g 110 95
8 g 106 101
9 i 103 70
10 j 149 73
我还有一个名为" hold_df"
的唯一组值的数据框 groups
1 a
2 c
3 d
4 e
5 f
6 g
7 i
8 j
我想在hold_df中添加列,其中包括测试数据帧中唯一出现的次数,以及当列v超过某个阈值(例如100)时唯一出现的次数
groups unique uniqueConditional
1 a 2 1
2 c 1 0
3 d 1 0
4 e 1 1
5 f 1 1
6 g 2 2
7 i 1 1
8 j 1 1
答案 0 :(得分:1)
来自dplyr
的解决方案。我们可以使用group_by
和summarise
来汇总test
数据框。 test2
是最终输出。
library(dplyr)
test2 <- test %>%
group_by(group) %>%
summarise(unique = n(), uniqueConditional = sum(v > 100))
test2
# A tibble: 8 x 3
group unique uniqueConditional
<chr> <int> <int>
1 a 2 1
2 c 1 0
3 d 1 0
4 e 1 1
5 f 1 1
6 g 2 2
7 i 1 1
8 j 1 1
在这种情况下,test2
与基于hold_df
的所需输出相同。但是,如果您的hold_df
是test2
的子集。我们可以执行以下操作来过滤所需的组。
test3 <- test2 %>% semi_join(hold_df, by = c("group" = "groups"))
test <- read.table(text = " group v x
1 a 110 114
2 a 90 150
3 c 57 100
4 d 53 98
5 e 114 67
6 f 143 126
7 g 110 95
8 g 106 101
9 i 103 70
10 j 149 73",
header = TRUE, stringsAsFactors = FALSE)
hold_df <- read.table(text = " groups
1 a
2 c
3 d
4 e
5 f
6 g
7 i
8 j ",
header = TRUE, stringsAsFactors = FALSE)
答案 1 :(得分:0)
使用基本功能:
hold_df <- cbind(
setNames(data.frame(table(test$group)),c("groups","unique")),
unique_conditional = data.frame(table(subset(test,v>100)$group))[,2])
# groups unique unique_conditional
# 1 a 2 1
# 2 c 1 0
# 3 d 1 0
# 4 e 1 1
# 5 f 1 1
# 6 g 2 2
# 7 i 1 1
# 8 j 1 1