首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提取R中列之间的唯一值

提取R中列之间的唯一值
EN

Stack Overflow用户
提问于 2018-11-01 12:19:58
回答 3查看 1.1K关注 0票数 0

我只想从数据帧中的6列(第1列和(2-6)列)中提取唯一的值(作为文件)。不显示任何其他列的某一列的唯一值。

代码语言:javascript
复制
    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

输出应该看起来像..。

代码语言:javascript
复制
  A       B         C         D         E       F
  12      NA        14        55        23      13
                    30        21         

谢谢你。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-11-02 10:02:44

你说你想..。

不显示任何其他列的某一列的唯一值。

一种可能的解决办法:

代码语言:javascript
复制
> 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

请注意,这与您的预期输出表不一致,但它与您预期的内容是一致的(上面的引号)。

格式化输出

代码语言:javascript
复制
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

数据

代码语言:javascript
复制
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))
票数 0
EN

Stack Overflow用户

发布于 2018-11-01 12:25:14

请试用以下方法:

代码语言:javascript
复制
 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
EN

Stack Overflow用户

发布于 2018-11-01 12:26:14

您可以使用来自filter包的dplyr包以及intersect:

代码语言:javascript
复制
library(dplyr)
df %>% filter(!(A %in% intersect(A,B) | B %in% intersect(A,B)))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53101154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档