提取R

时间:2018-11-01 12:19:58

标签: r dataframe

我想从数据框中的6列(第一列与(2-6)列)中仅提取(作为文件)唯一值。一列中没有任何其他列的唯一值。

    A              B         C         D          E       F

   12             15         18        55         27      13
   15             25         10        21         23      20
   20             18         14        25         15      25
   25             27         30        35         25      10
                             35                           15

输出应类似于...

  A       B         C         D         E       F
  12      NA        14        55        23      13
                    30        21         

谢谢。

3 个答案:

答案 0 :(得分:1)

请尝试以下操作:

 data$A[!data$A %in% c(data$B, data$C, data$D, data$E, data$F)]
 data$B[!data$B %in% c(data$A, data$C, data$D, data$E, data$F)]
 data$C[!data$C %in% c(data$B, data$A, data$D, data$E, data$F)]
 data$D[!data$D %in% c(data$B, data$C, data$A, data$E, data$F)]
 data$E[!data$E %in% c(data$B, data$C, data$D, data$A, data$F)]
 data$F[!data$F %in% c(data$B, data$C, data$D, data$E, data$A)]

答案 1 :(得分:1)

您可以将notification.loading().包中的filter与相交一起使用:

dplyr

答案 2 :(得分:0)

您说想要...

  

一列中没有其他任何值的唯一值   列。

可能的解决方案:

> lapply(setNames(1:6, names(df)), function(i) setdiff(df[,i], unlist(df[,-i])))
$A
[1] 12

$B
integer(0)

$C
[1] 14 30

$D
[1] 55 21

$E
[1] 23

$F
[1] 13

请注意,这与您的期望输出表不一致,但与您所说的期望(上面的引用)一致。

格式化输出

x <- lapply(setNames(1:6, names(df)), function(i) setdiff(df[,i], unlist(df[,-i])))
l <- sapply(x, length)
x[l==0] <- NA
sapply(x, "length<-", max(l, na.rm=T))
#       A  B  C  D  E  F
# [1,] 12 NA 14 55 23 13
# [2,] NA NA 30 21 NA NA

数据
df <- read.table(text="A              B         C         D          E       F
12             15         18        55         27      13
15             25         10        21         23      20
20             18         14        25         15      25
25             27         30        35         25      10
NA             NA         35        NA         NA      15", header=TRUE)

# dput

df <- structure(list(A = c(12L, 15L, 20L, 25L, NA), B = c(15L, 25L, 
18L, 27L, NA), C = c(18L, 10L, 14L, 30L, 35L), D = c(55L, 21L, 
25L, 35L, NA), E = c(27L, 23L, 15L, 25L, NA), F = c(13L, 20L, 
25L, 10L, 15L)), .Names = c("A", "B", "C", "D", "E", "F"), class = "data.frame", row.names = c(NA, 
-5L))