Как присвоить значение столбцу на основе значения в другом столбце в кадре данных R или таблице данных

Я надеюсь, что вы можете помочь мне здесь. Я нашел много простых ответов на перекодирование, но ни один из них не смог адаптироваться к моей проблеме. Проблема в том, что для всех строк я хочу установить для столбца Level_eng_1 значение столбца verb_e для каждой строки, где столбец parent_concept этой строки соответствует столбцу идентификатора.

Я пытался адаптировать многочисленные решения, существующие в stackoverflow, но безуспешно.

Вот данные.

structure(list(ID = c(1, 2, 3, 11, 12, 13, 14, 16, 20, 21, 22, 
23, 24, 25, 30, 31, 32, 33, 34), Parent_Concept = c(0L, 0L, 0L, 
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L
), verb_e = c("act", "change", "move", "support", "regulate", 
"interact", "structure", "communicate", "time", "make", "decrease", 
"increase", "modify", "orientate", "motion", "inhibit", "bring_together", 
"separate", "transmit"), Level_eng_1 = c(NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), row.names = c(NA, 19L), class = "data.frame")

Желаемый результат:

structure(list(ID = c(1, 2, 3, 11, 12, 13, 14, 16, 20, 21, 22, 
23, 24, 25, 30, 31, 32, 33, 34), Parent_Concept = c(0L, 0L, 0L, 
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L
), verb_e = c("act", "change", "move", "support", "regulate", 
"interact", "structure", "communicate", "time", "make", "decrease", 
"increase", "modify", "orientate", "motion", "inhibit", "bring_together", 
"separate", "transmit"), Level_eng_1 = c("act", "change", "move", 
"act", "act", "act", "act", "act", "change", "change", "change", 
"change", "change", "change", "move", "move", "move", "move", 
"move")), row.names = c(NA, 19L), class = "data.frame")

Спасибо за помощь!


person litotes    schedule 26.06.2019    source источник
comment
Значение для 0 не соответствует   -  person akrun    schedule 26.06.2019


Ответы (1)


Может это поможет

library(dplyr)
input %>% 
    mutate(Level_eng_1 = verb_e[match(Parent_Concept, ID)], 
           Level_eng_1 = case_when(is.na(Level_eng_1) ~ verb_e, TRUE  ~Level_eng_1))
#    ID Parent_Concept         verb_e Level_eng_1
#1   1              0            act         act
#2   2              0         change      change
#3   3              0           move        move
#4  11              1        support         act
#5  12              1       regulate         act
#6  13              1       interact         act
#7  14              1      structure         act
#8  16              1    communicate         act
#9  20              2           time      change
#10 21              2           make      change
#11 22              2       decrease      change
#12 23              2       increase      change
#13 24              2         modify      change
#14 25              2      orientate      change
#15 30              3         motion        move
#16 31              3        inhibit        move
#17 32              3 bring_together        move
#18 33              3       separate        move
#19 34              3       transmit        move

данные

input <-  structure(list(ID = c(1, 2, 3, 11, 12, 13, 14, 16, 20, 21, 22, 
23, 24, 25, 30, 31, 32, 33, 34), Parent_Concept = c(0L, 0L, 0L, 
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L
), verb_e = c("act", "change", "move", "support", "regulate", 
"interact", "structure", "communicate", "time", "make", "decrease", 
"increase", "modify", "orientate", "motion", "inhibit", "bring_together", 
"separate", "transmit"), Level_eng_1 = c(NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), row.names = c(NA, 
19L), class = "data.frame")
person akrun    schedule 26.06.2019
comment
Спасибо, Акрун, но целевой столбец (level_eng_1) остается пустым (нет данных). - person litotes; 26.06.2019