我正在尝试提取X2和X3是同一对值的X1的值。
X1 X2 X3
1 1 1 8
2 2 4 8
3 3 4 8
4 4 90 199
5 5 3 9
6 6 3 9我可以给出这样的命令
subset(df, df$X2==4 & df$X3==8)它会把我送回来
X1 X2 X3
2 2 4 8
3 3 4 8但是,我如何才能使其动态化呢?所以它会返回
X1 X2 X3
2 2 4 8
3 3 4 8
5 5 3 9
6 6 3 9发布于 2017-10-21 21:26:25
一种使用dplyr实现这一点的方法。统计每对(X2,X3)的出现次数,filter对出现多次,将它们连接到初始data.frame中:
df <- tribble(~X1, ~X2, ~X3,
1, 1, 8,
2, 4, 8,
3, 4, 8,
4, 90, 199,
5, 3, 9,
6, 3, 9)
df2 <- df %>%
group_by(X2, X3) %>%
count() %>%
ungroup()
df2
# A tibble: 4 x 3
# X2 X3 n
# <dbl> <dbl> <int>
#1 1 8 1
#2 3 9 2
#3 4 8 2
#4 90 199 1
df2 %>%
filter(n>1) %>%
select(-n) %>%
left_join(df, by = c("X2","X3"))
# A tibble: 4 x 3
# X2 X3 X1
# <dbl> <dbl> <dbl>
#1 3 9 5
#2 3 9 6
#3 4 8 2
#4 4 8 3发布于 2017-10-21 21:46:02
输入
df <- data.frame(x1 = c(1,2,3,5,4,6), x2 = c(3,4,5,3,6,6), x3 = c(4,4,2,4,2,2))
df
# x1 x2 x3
# 1 1 3 4
# 2 2 4 4
# 3 3 5 2
# 4 5 3 4
# 5 4 6 2
# 6 6 6 2配对x2 x3和
使用x1创建df1,并将x2、x3值对作为一列
df1 <- data.frame(x1 = df$x1, pair = paste(df$x2,df$x3, sep = ","))
df1
# x1 pair
# 1 1 3,4
# 2 2 4,4
# 3 3 5,2
# 4 5 3,4
# 5 4 6,2
# 6 6 6,2所需的输出
从df中提取频率大于1的行,即,如果任何x2, x3对的频率大于1,则将在df1的帮助下从df中提取这些对
df[df1$pair %in% names(which(table(df1$pair) > 1)),]
# x1 x2 x3
# 1 1 3 4
# 4 5 3 4
# 5 4 6 2
# 6 6 6 2https://stackoverflow.com/questions/46863460
复制相似问题