Добавить столбец в наборе данных, используя числа из вектора имени - PullRequest
0 голосов
/ 06 марта 2019

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

Cat    5
Dog    1
Monkey 4 

Если при записи имена (вес) , вывод будет "Кошка" "Собака" "Обезьяна" .но я не могу выбрать число, связанное с Cat, используя Weight $ Cat .

У меня есть набор данных df со столбцом, называемым животными.

 Animals

 Cat
 Cat
 Dog
 Monkey
 Cat
 Monkey

Мне нужно создать новый столбец с именем weight с номерами, связанными с каждым животным.То есть

Animals    weight
 Cat       5
 Cat       5
 Dog       1
 Monkey    4
 Cat       5
 Monkey    4

У меня есть цикл (и он не работает должным образом), но я думаю, что в R должен быть более простой способ сделать это.

Конечно, мой набор данных намного больше, чем запись в приведенном выше примере.

Ответы [ 4 ]

3 голосов
/ 06 марта 2019

Вы можете просто сделать df$weight <- Weight[df$Animals].

1 голос
/ 06 марта 2019

Мы можем match names из Weight с Animal столбцом и получить соответствующий Weight.

Weight <- c("Cat" = 5, "Dog" = 1, "Monkey" = 4)

df$Weight <- Weight[match(df$Animals, names(Weight))]

df
#  Animals Weight
#1     Cat      5
#2     Cat      5
#3     Dog      1
#4  Monkey      4
#5     Cat      5
#6  Monkey      4

Как уже упоминалось в комментариях @markus, мы также можем использовать stack и merge

merge(df, stack(Weight), all.x = TRUE, by.x = "Animals", by.y = "ind")
0 голосов
/ 06 марта 2019

Вы можете преобразовать вес в кадре данных и объединить в df

Weight <- as.data.frame(Weight, stringsAsFactors = F)
Weight$Animals <- row.names(Weight)

df %>%
  left_join(Weight, by = "Animals")
0 голосов
/ 06 марта 2019

С dplyr (проверьте примечание ниже, также измените «Значение» на «Вес»):

library(dplyr)
df_target %>% 
 left_join(df_cats,by="Animals")

Выход ::

  Animals Value
1     Cat     5
2     Cat     5
3     Dog     1
4  Monkey     4
5     Cat     5
6  Monkey     4

Примечание ::

df_cats<-read.table(text="Cat    5
                      Dog    1
                    Monkey 4 ",header=F)
names(df_cats)<-c("Animals","Value")
df_target<-read.table(text="Animals

                      Cat
                      Cat
                      Dog
                      Monkey
                      Cat
                      Monkey",header=T)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...