使用名称向量中的数字在数据集中添加一列

时间:2019-03-06 13:15:59

标签: r dataframe

我有一个名为 Weight 的名称向量,其中每个名称都有一个关联的编号。例如:

Cat    5
Dog    1
Monkey 4 

如果输入名称(重量),则输出为“猫”,“狗”,“猴子” 。但我无法使用 Weight $ Cat 选择与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 个答案:

答案 0 :(得分:3)

您只需执行df$weight <- Weight[df$Animals]

答案 1 :(得分:1)

我们可以在match列中namesWeight 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的评论中所述,我们也可以使用stackmerge

merge(df, stack(Weight), all.x = TRUE, by.x = "Animals", by.y = "ind")

答案 2 :(得分:0)

使用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)

答案 3 :(得分:0)

您可以在数据框中转换权重并加入df

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

df %>%
  left_join(Weight, by = "Animals")