R 根据多列的值提取行

R 根据多列的值提取行,r,R,我有一个大数据框,下面对其进行了简化。给定以下数据帧结构,我需要折叠以返回两个不同的行,其中col3具有不同的值,但col1和col2具有唯一的值 dat <- data.frame("col1" = c(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1), "col2" = c( "A","A", "A", "A", "A", "A", "A", "A", "A", "A"," A", "A", "A", "A", "A"), "col3" = c

我有一个大数据框,下面对其进行了简化。给定以下数据帧结构,我需要折叠以返回两个不同的行,其中col3具有不同的值,但col1和col2具有唯一的值

dat <- data.frame("col1" = c(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1), 
       "col2" = c( "A","A", "A", "A", "A", "A", "A", "A", "A", "A"," A", "A", "A", "A", "A"),
       "col3" = c( "Z", "Z", "Z", "Z", "Z", "Z", "Z", "Z", "Z", "Y", "Y", "Y", "Y", "Y", "Y"))

   col1 col2 col3
1     1    A    Z
2     1    A    Z
3     1    A    Z
4     1    A    Z
5     1    A    Z
6     1    A    Z
7     1    A    Z
8     1    A    Z
9     1    A    Z
10    1    A    Y
11    1    A    Y
12    1    A    Y
13    1    A    Y
14    1    A    Y
15    1    A    Y
然而,如果col3只是z,我将不返回任何行。我可以通过table函数获得这些数据的计数,但我需要查看实际的行。 有什么想法吗


谢谢

非常简单
dplyr
解决方案:

dat <- structure(list(col1 = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1), col2 = c("A", "A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A"), col3 = c("Z", "Z", "Z", "Z", "Z", 
"Z", "Z", "Z", "Z", "Y", "Y", "Y", "Y", "Y", "Y")), class = "data.frame", row.names = c(NA, 
-15L))

library(dplyr)

dat %>% group_by(col1,col2) %>% distinct()

# A tibble: 2 x 3
# Groups:   col1, col2 [1]
   col1 col2  col3 
  <dbl> <chr> <chr>
1     1 A     Z    
2     1 A     Y
尝试以下方法:

library(dplyr)
dat %>%
  group_by(col1, col2) %>%
  filter(length(unique(col3)) > 1) %>%
  distinct()
如果
dat
如下所示:

dat <- structure(list(col1 = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1), col2 = c("A", "A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A"), col3 = c("Z", "Z", "Z", "Z", "Z", 
"Z", "Z", "Z", "Z", "Z", "Z", "Z", "Z", "Z", "Z")), class = "data.frame", row.names = c(NA, 
-15L))
# A tibble: 0 x 3
# Groups:   col1, col2 [0]
# ... with 3 variables: col1 <dbl>, col2 <chr>, col3 <chr>

请注意,我在过滤器中使用的是
length(unique())
,而不是
n_distinct
,因为有一个
dplyr
错误,使得分组数据帧的过滤器中的
n_distinct
运行速度非常慢。

好吧,我成功地获得了所需的输出,但我想知道它是否适用于您的真实数据。我使用
as.data.frame(apply(dat,2,unique))
获得它。让我知道这是否适用于您。在示例数据中,我在哪里看到col1=col2?你是说每一个col1,col2值的唯一组合吗?@Gopala,是的,这就是我的意思。我为措词不当而道歉。我已经进行了更新,以使其更有意义。当col3值在整个过程中都很常见时,这将无法产生“无行”输出,正如海报所建议的那样。
dat <- structure(list(col1 = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1), col2 = c("A", "A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A"), col3 = c("Z", "Z", "Z", "Z", "Z", 
"Z", "Z", "Z", "Z", "Z", "Z", "Z", "Z", "Z", "Z")), class = "data.frame", row.names = c(NA, 
-15L))
# A tibble: 0 x 3
# Groups:   col1, col2 [0]
# ... with 3 variables: col1 <dbl>, col2 <chr>, col3 <chr>
# A tibble: 2 x 3
# Groups:   col1, col2 [1]
   col1 col2  col3 
  <dbl> <chr> <chr>
1     1 A     Z    
2     1 A     Y