我只想从数据帧中的6列(第1列和(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 谢谢你。
发布于 2018-11-02 10:02:44
你说你想..。
不显示任何其他列的某一列的唯一值。
一种可能的解决办法:
> 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))发布于 2018-11-01 12:25:14
请试用以下方法:
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)]发布于 2018-11-01 12:26:14
您可以使用来自filter包的dplyr包以及intersect:
library(dplyr)
df %>% filter(!(A %in% intersect(A,B) | B %in% intersect(A,B)))https://stackoverflow.com/questions/53101154
复制相似问题