Сравните каждый элемент в том же столбце с другим набором записей в R - PullRequest
0 голосов
/ 26 октября 2018

enter image description here

У меня есть таблица данных, в которой нужно заполнить столбец Result, основываясь на сравнении / сопоставлении элемента с элементом в одном и том же столбце из двух разных типов. Здесь нам нужно сравнить значения в одном и том же столбце одно за другим между объектом 1 и объектом 2, а не между столбцом и столбцом.

если вы видите значение результата в первой строке, я упомянул 1,0,1 означает, что в Col-1 объекта-1 совпадают в Col-1 объекта-2. аналогично 0 для col-2 и 1 для col-3.

Оцените любые решения в R с пакетом или без пакет

1 Ответ

0 голосов
/ 26 октября 2018

Не уверен, что я хорошо понимаю вашу проблему. И не зная, каковы пределы в количестве значений для Типа и столбцов, вот общее решение с тидиверсом:

# Your data (there seems to be a problem on line3 result)
df <- read.table(text=
"Type Col1 Col2 Col3 Result
O1 A B F 1,0,1
O1 B D S 0,1,0
O1 C F R 0,0,0
O1 D D D 1,1,1
O2 A F F 1,0,1
O2 D D D 1,1,1",header=TRUE,stringsAsFactors=FALSE)

df %>% select(-Result) %>% mutate(id=row_number()) -> df1
df1 %>% gather(k,v,-Type,-id) -> df2
crossing(df2,df2) %>%
   filter((Type!=Type1)&(k==k1)) %>%
   mutate(z=as.integer(v==v1)) %>%
   group_by(id,id1,k) %>%
   arrange(desc(z)) %>% filter(row_number()==1) %>%
   group_by(id,id1) %>% arrange(k) %>%
   summarise(n=sum(z),z=paste(z,collapse=","))%>%
   filter(n>=max(n)) %>%
   select(-id1,-n) %>%
   inner_join(df1,.,by="id")
#  Type Col1 Col2 Col3 id     z
#1   O1    A    B    F  1 1,0,1
#2   O1    B    D    S  2 0,1,0
#3   O1    C    F    R  3 0,1,0
#4   O1    D    D    D  4 1,1,1
#5   O2    A    F    F  5 1,0,1
#6   O2    D    D    D  6 1,1,1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...