Как переместить переменные, соответствующие столбцу A в столбце B, в другую строку с той же переменной, что и столбец A, с пустым столбцом B? - PullRequest
1 голос
/ 25 мая 2020

У меня есть набор данных в следующем общем виде

Subject. Target.  Valence
1.       annoy.    n
1.       beauty.   p
1.       shirt.    o
1.       succeed.  p
.
.
.
2.       beauty
2.       annoy
2.       succeed

В основном у нас есть данные от 1600 разных людей по большому количеству целевых слов каждый. Этот набор данных имеет валентность только для первого субъекта, но не вводится для остальных участников. Порядок целевых слов индивидуален для каждого человека. Что я пытаюсь сделать, так это найти в моем наборе данных каждый раз, когда будет найдено целевое слово, скопировать валентность из темы 1 и переместить букву валентности везде, где это слово встречается в документе.

В конечном итоге это должно выглядеть примерно так:

Subject. Target.  Valence
1.       annoy.    n
1.       beauty.   p
1.       shirt.    o
1.       succeed.  p
.
.
.
2.       beauty.   p
2.       annoy.    n
2.       succeed.  p

В идеале я хочу завершить это в R, но я также немного знаком с MATLAB. На каждого участника приходится более 1000 слов, поэтому прямой поиск каждого слова нецелесообразен, но это единственный способ, которым я понял, как это работает.

Заранее спасибо. Я новичок в R, поэтому прошу прощения, если ответ очевиден.

Ответы [ 2 ]

1 голос
/ 25 мая 2020

В предыдущем предложении круглые скобки поставлены не в том месте. Он должен выглядеть так:

i1 <- df1$Subject != 1
df1$Valence[i1] <- with(df1, 
       Valence[match(Target[i1], Target[!i1])])

Match - ваш лучший выбор.

1 голос
/ 25 мая 2020

Мы можем использовать match, чтобы получить индекс строки, в которой 'Target' из 'Subject' 1 совпадает с другими Subject, а затем назначить его столбцу 'Valence' на основе индекса

i1 <- df1$Subject != 1
df1$Valence[i1] <- with(df1, 
       Valence[match(Target[i1], Target[!i1])])
df1
#  Subject  Target Valence
#1       1   annoy       n
#2       1  beauty       p
#3       1   shirt       o
#4       1 succeed       p
#5       2  beauty       p
#6       2   annoy       n
#7       2 succeed       p

данные

df1 <- structure(list(Subject = c(1L, 1L, 1L, 1L, 2L, 2L, 2L), Target = c("annoy", 
"beauty", "shirt", "succeed", "beauty", "annoy", "succeed"), 
    Valence = c("n", "p", "o", "p", NA, NA, NA)), 
    class = "data.frame", row.names = c(NA, 
-7L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...