Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何识别行中重复的元素_R_Duplicates - Fatal编程技术网

R 如何识别行中重复的元素

R 如何识别行中重复的元素,r,duplicates,R,Duplicates,我有一个数据框,看起来像这样,但总共有31个变量(列)和11000个观察值(缺少的值为空): 我想按行确定是否存在“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,

我有一个数据框,看起来像这样,但总共有31个变量(列)和11000个观察值(缺少的值为空):

我想按行确定是否存在“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 <- ""

df$D我是
dplyr
tidyverse
的粉丝,这就是为什么我要走这条路线:

df <- data.frame(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)

df %>% 
mutate(index = row_number()) %>% 
gather(key, value, -index, na.rm = T) %>% 
group_by(index) %>% 
summarise(D = any(duplicated(value))) %>%
cbind(df)
df%
变异(索引=行号())%>%
聚集(键,值,-索引,na.rm=T)%>%
分组依据(指数)%>%
汇总(D=任何(重复(值)))%>%
cbind(df)

以下仅使用基本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

请使用
dput
显示示例。值
a1
c1
等是字符串,需要引用。您可以通过将代码复制/粘贴到R控制台中进行检查,看看它是否有效。选项是
apply(df1,1,FUN=function(x)anyDuplicated(x[x!=“”])
多亏了你们两位的评论,现在最后一段代码有效了,仍然不知道函数有什么问题,但我认为主要的是有一个解决方案。我从原始数据中删除了其他列,忘记了包含id列,但在我用它计算的代码中,这就是为什么我没有得到正确的数据。再次感谢。你有答案,请阅读你的问题时要做什么。事实上,我使用了代码,我把它放在自己只需要纠正它,但从答案中我更喜欢第二个,所以我选择了那个。无法表明有用性,因为我对这一点还不熟悉,而且我的声誉很低(但我确实这么做了,只是这里没有显示)。是的,我还在学习游戏规则。谢谢你。我对R比较陌生,所以我不知道如何从这段代码中获取D的对象。分析11000行是很困难的。不,我只是不知道如何使用您的代码将结果添加到我的df中。我可以在控制台中得到答案,但我需要它作为df中的新变量。使用此代码可以得到我想要的结果:df$D,因此我添加了
cbind
,这将把它添加到您的
df
df$D <- apply(df[-1], 1, function(i) any(duplicated(i, incomparables = NA)))
df <- data.frame(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)

df %>% 
mutate(index = row_number()) %>% 
gather(key, value, -index, na.rm = T) %>% 
group_by(index) %>% 
summarise(D = any(duplicated(value))) %>%
cbind(df)
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
v <- stringr::str_sort(ls(pattern = '^T[[:digit:]]+$'), numeric = TRUE)
df1 <- data.frame(mget(v))