2017-02-10 2 views
0

Я хотел бы преобразовать следующие примеры данных на основе вымышленного примера торговых опросов. Подумайте, что страна A заявляет, что она экспортирует в страну B (строка 2, экспорт = 1), а страна B говорит, что она не импортирует из A (строка 4, импорт = 0) и наоборот. Теперь я хочу получить максимальные значения (= 1) для всех этих совпадений в наборе данных, т. Е. В этом случае Import в строке 4 будет = 1).R: Социальная сеть - максимальные значения на основе условий в разных столбцах и строках

> df <- data.frame("Sender" = c("A", "A", "A", "B", "B", "B", "C", "C", "C"), 
+ "Receiver" = c("A", "B", "C", "A", "B", "C", "A", "B", "C"), 
+ "Export"= c(0,1,0,0,0,0,0,0,0), 
+ "Import" = c(0,1,1,0,0,1,0,0,0)) 
> df 
    Sender Receiver Export Import 
1  A  A  0  0 
2  A  B  1  1 
3  A  C  0  1 
4  B  A  0  0 
5  B  B  0  0 
6  B  C  0  1 
7  C  A  0  0 
8  C  B  0  0 
9  C  C  0  0 

Решение должно быть

Sender Receiver Export Import Export_MAX Import_MAX 
1  A  A  0  0   0   0 
2  A  B  1  1   1   1 
3  A  C  0  1   0   1 
4  B  A  0  0   1   1 
5  B  B  0  0   0   0 
6  B  C  0  1   0   1 
7  C  A  0  0   1   0 
8  C  B  0  0   1   0 
9  C  C  0  0   0   0 

Я искал много способов, чтобы сделать это в этом форуме и в других местах, но не смог найти решение до сих пор. Я подумывал о чем-то вроде применения максимальной функции в столбцах «Импорт» & «Экспортировать», при условии значений, указанных в «Отправителе» & «Приемник», но я не понял, насколько это возможно сообщить здесь код.

Есть идеи? Ваш совет очень ценится.

ответ

0

Вот мое собственное решение, если кто-то попадает в ту же проблему.

df$Pairs <- paste(df$Sender,df$Receiver,sep = "-") 
values <- df$Pairs[df$Export==1] 
values2 <- df$Pairs[df$Import==1] 

df$Import[df$Pairs %in% gsub("(\\w+)-(\\w+)","\\2-\\1", values)] <- 1 
df$Export[df$Pairs %in% gsub("(\\w+)-(\\w+)","\\2-\\1", values2)] <- 1 

В первой строке используется вся комбинация отправителя и получателя в поле символов, разделенное символом «-». Вторая и третья строки создают парную комбинацию для каждой строки, где условия экспорта/импорта равны 1. В последних двух строках используется gsub для соответствия всем экземплярам, ​​в которых ответчик отправителя-получателя или получателя текстовой комбинации является совпадением, и заменяют эти значения на 1 .

Solution (непосредственно в колонках Экспорт/импорт):

Sender Receiver Export Import Export_MAX Import_MAX 
1  A  A  0  0   0   0 
2  A  B  1  1   1   1 
3  A  C  0  1   0   1 
4  B  A  1  1   1   1 
5  B  B  0  0   0   0 
6  B  C  0  1   0   1 
7  C  A  1  0   1   0 
8  C  B  1  0   1   0 
9  C  C  0  0   0   0 
Смежные вопросы