Вставить строку, если условие соответствует - PullRequest
0 голосов
/ 15 мая 2019

У меня небольшой вопрос по поводу вставки функции в r. Вот мой стол:

Name        Value
AA          0       
BB          1       
CC          0   
DD          1       
EE          1       
FF          1       
GG          0   
HH          1

То, что я хочу сделать, это получить другой столбец с именем Category в Table, зависеть от Name столбца таким образом, что если AA или BB в столбце, то в Category столбец должен паста Duke, для категории CC должна быть Mike, для категории DD или EE должно быть Mark и т. д. В конце концов я должен получить Table

Name      Value        Category
AA          0           Duke    
BB          1           Duke    
CC          0           Mike
DD          1           Mark    
EE          1           Mark    
FF          1           Tom 
GG          0           Hex
HH          1           Tom

Table довольно большой и его невозможно сделать вручную, так есть ли какой-нибудь умный способ прочитать столбец Name и вставить в столбец Category? Любая функция цикла или комбинация функции цикла и вставки в r? Я ищу на stackoverflow, но не могу найти похожий случай. Я думал, что-то вроде этого: Table$Category <- within(Table,ifelse(Name=="AA" | Name== "BB",paste("Duke")), ifelse (Name=="CC" ,paste("Mike")), ifesle(Name=="DD" | Name== "EE",paste("Mark")) Может кто-то взглянуть на это? Спасибо.

Ответы [ 2 ]

1 голос
/ 15 мая 2019

Вы можете использовать именованный вектор, где вы определяете отображение.Пример:

lookup_vector <- c(
  AA = "Duke",
  BB = "Duke",
  CC = "Mike",
  DD = "Mark",
  EE = "Mark",
  FF = "Tom",
  GG = "Hex",
  HH = "Tom"
)

Table[["Category"]] <- lookup_vector[Table[["Name"]]]

#   Name Value Category
# 1   AA     0     Duke
# 2   BB     1     Duke
# 3   CC     0     Mike
# 4   DD     1     Mark
# 5   EE     1     Mark
# 6   FF     1      Tom
# 7   GG     0      Hex
# 8   HH     1      Tom

Данные:

Table <- data.frame(
  Name = c("AA", "BB", "CC", "DD", "EE", "FF", "GG", "HH"), 
  Value = c(0L, 1L, 0L, 1L, 1L, 1L, 0L, 1L)
)
0 голосов
/ 15 мая 2019

Мы можем использовать keyVal data.frame, а затем left_join

library(dplyr)
 keyVal <- structure(list(Name = structure(1:8, .Label = c("AA", "BB", "CC", 
  "DD", "EE", "FF", "GG", "HH"), class = "factor"), Category = structure(c(1L, 
 1L, 4L, 3L, 3L, 5L, 2L, 5L), .Label = c("Duke", "Hex", "Mark", 
  "Mike", "Tom"), class = "factor")), class = "data.frame",
  row.names = c(NA, -8L))


library(dplyr)
left_join(df1, keyVal)
#  Name Value Category
#1   AA     0     Duke
#2   BB     1     Duke
#3   CC     0     Mike
#4   DD     1     Mark
#5   EE     1     Mark
#6   FF     1      Tom
#7   GG     0      Hex
#8   HH     1      Tom

данные

df1 <- structure(list(Name = structure(1:8, .Label = c("AA", "BB", "CC", 
 "DD", "EE", "FF", "GG", "HH"), class = "factor"), Value = c(0L, 
 1L, 0L, 1L, 1L, 1L, 0L, 1L)), class = "data.frame", row.names = c(NA, 
 -8L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...