我有一个名为 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中应该是一种更简单的方法。
当然,我的数据集比上面示例中的数据大得多。
答案 0 :(得分:3)
您只需执行df$weight <- Weight[df$Animals]
。
答案 1 :(得分:1)
我们可以在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")
答案 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")