我有一个看起来像这样的数据框,但共有31个变量(列)和11000个观测值(缺失值为空):
T1 = c("a1", "c1", "e1", "d1", "a3", "f1", "f2")
T2 = c("b1", "d1", "a1", "b2", "a3", "f1", "f3")
T3 = c(NA, NA, "e1", "d1", NA, "a4", "f3")
T4 = c( NA, NA, NA, "b2", NA, "b3", "f5")
T5 = c( NA, NA, NA, NA, NA, "a4", "f6")
T6 = c( NA, NA, NA, NA, NA, NA, "f7")
T7 = c(NA, NA, NA, NA, NA, NA, "c1")
T8 = c(NA, NA, NA, NA, NA, NA, "c1")
T9 = c(NA, NA, NA, NA, NA, NA, "f2")
T10= c(NA, NA, NA, NA, NA, NA, "f3")
我想按行标识“ T”类型变量中是否有重复的元素,所以我的df如下所示:
T1 = c("a1", "c1", "e1", "d1", "a3", "f1", "f2")
T2 = c("b1", "d1", "a1", "b2", "a3", "f1", "f3")
T3 = c(NA, NA, "e1", "d1", NA, "a4", "f3")
T4 = c( NA, NA, NA, b2, NA, "b3", "f5")
T5 = c( NA, NA, NA, NA, NA, "a4", "f6")
T6 = c( NA, NA, NA, NA, NA, NA, "f7")
T7 = c(NA, NA, NA, NA, NA, NA, "c1")
T8 = c(NA, NA, NA, NA, NA, NA, "c1")
T9 = c(NA, NA, NA, NA, NA, NA, "f2")
T10= c(NA, NA, NA, NA, NA, NA, "f3")
D = c(F, F, T, T, T, T, T)
我试图编写一个函数,但是显然我错过了一些东西,因为它不起作用: 首先,我创建了一个空值的新变量
df$D <- ""
然后该功能:
dupl <- function(x){
for(i in 1:nrow(x))
if (duplicated(x[i], incomparables = NA)){
df$D <- "TRUE"
}else{
df$D <- "FALSE"
}
}
df$D <- dupl(df)
我也尝试了这段代码,但是它没有给我包含重复元素的行(当D取值为true时):
df$D <- apply(df[-1], 1, function(i) any(duplicated(i, incomparables = NA)))
答案 0 :(得分:0)
我是\bISS/(?<issue>\d{4}-\d{2}-\d{2})\b
和dplyr
的粉丝,所以我会选择这条路线:
tidyverse
答案 1 :(得分:0)
以下仅使用基数R。
df1$D <- apply(df1, 1, function(x) {
x <- na.omit(x)
any(unlist(Map('==', x[1], x[-1])))
})
df1
# T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 D
#1 a1 b1 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> FALSE
#2 c1 d1 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> FALSE
#3 e1 a1 e1 <NA> <NA> <NA> <NA> <NA> <NA> <NA> TRUE
#4 d1 b2 d1 b2 <NA> <NA> <NA> <NA> <NA> <NA> TRUE
#5 a3 a3 <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> TRUE
#6 f1 f1 a4 b3 a4 <NA> <NA> <NA> <NA> <NA> TRUE
#7 f2 f3 f3 f5 f6 f7 c1 c1 f2 f3 TRUE
数据。
使用问题中的向量,将使用以下代码创建data.frame。它使用外部软件包stringr
中的函数。
v <- stringr::str_sort(ls(pattern = '^T[[:digit:]]+$'), numeric = TRUE)
df1 <- data.frame(mget(v))