Отображение соответствующих значений во фрейме данных в R

Пожалуйста, проверьте код ниже, я создал фрейм данных с использованием трех переменных ниже, переменная «y123» вычисляет сходство между столбцами a2 и a1. Переменная «y123» дает мне всего 16 значений, где каждое значение a1 сравнивается с a2. Мне нужно, чтобы при сравнении конкретного значения «a1» с конкретным значением «a2» я хотел, чтобы кроме того отображалось соответствующее значение «a3» рядом с «a2». Таким образом, результатом должен быть фрейм данных со столбцом y123 и вторым столбцом с соответствующим столбцом «a3», появляющимся четыре раза, то есть 16 значений. Спасибо и помогите пожалуйста.

library(stringdist)
library(RecordLinkage)
a1 = c(103,120,142,153)
a2 = c(113,453,142,102)
a3 = c("a1","b1","c1","d1")
a1 = as.character(a1)
a2 = as.character(a2)
a3 = as.character(a3)
a123 = data.frame(a1,a2,a3)
y123 = sapply(a1, function(i) RecordLinkage::levenshteinSim(i,a2))
b1 = c(y123)
b1

Мне нужно что-то перечислить:

new_data = data.frame(b1,new_column)

person Ashmin Kaul    schedule 07.12.2017    source источник
comment
Может быть, добавить пример того, как будет выглядеть результат data.frame? Я немного смущен, когда вы говорите столбец y123, потому что это data.frame с несколькими столбцами.   -  person LyzandeR    schedule 07.12.2017
comment
@LyzandeR, спасибо за ответ, теперь я вам очень ясно дал понять.   -  person Ashmin Kaul    schedule 07.12.2017


Ответы (1)


Я думаю, это то, что вам нужно. Я изменил вашу sapply функцию:

data.frame(y123 = c(y123), a3 = rep(a3, times = length(a3)))
#        y123 a3
#1  0.6666667 a1
#2  0.3333333 b1
#3  0.3333333 c1
#4  0.6666667 d1
#5  0.3333333 a1
#6  0.0000000 b1
#7  0.3333333 c1
#8  0.3333333 d1
#9  0.3333333 a1
#10 0.0000000 b1
#11 1.0000000 c1
#12 0.6666667 d1
#13 0.6666667 a1
#14 0.6666667 b1
#15 0.3333333 c1
#16 0.3333333 d1
person LyzandeR    schedule 07.12.2017
comment
это хорошо, однако использование функции сделает его очень медленным, поскольку мне нужно применить вашу логику к огромному набору данных. Кроме того, в кадре данных будет столбец y123, а значения a1, a2, a3, a4 будут встречаться один за другим четыре раза. - person Ashmin Kaul; 07.12.2017
comment
Тогда я упростил это. Это тоже будет очень быстро. - person LyzandeR; 07.12.2017
comment
Хм, вы можете сделать небольшую настройку с колонкой a3 здесь, жесткое кодирование хорошо в случае небольших наборов данных, я бы использовал вашу логику для больших данных, sm способ параметризации это должен делать? Что-то похожее на функцию subset (), если вы можете проверить. - person Ashmin Kaul; 07.12.2017
comment
Вы имеете в виду 4 там ?. times аргумент будет длиной a3, т.е. times = length(a3) - person LyzandeR; 07.12.2017
comment
Спасибо, воспользуюсь этой логикой. - person Ashmin Kaul; 07.12.2017
comment
Позвольте нам продолжить это обсуждение в чате. - person Ashmin Kaul; 08.12.2017
comment
Привет, не могли бы вы проверить этот пост, в котором я столкнулся с проблемой. stackoverflow.com/questions/47920689/ - person Ashmin Kaul; 22.12.2017