您有一个动物类数据框:
animal <- data.frame('code' = c(1:4), 'class' = c('mammal','bird','fish','lizard'))
输出:
code animal
1 mammal
2 bird
3 fish
4 lizard
您还有另一个数据框,根据代码显示动物的陆地速度:
land.speed <- data.frame('speed' = c('42','32','6','0','100'), 'code' = c(1,2,4,3,1))
输出:
speed code
42 1
32 2
6 4
0 3
100 1
我想要做的是在标题为“动物”的第二个数据框中创建一个新列。基于第一个数据帧的代码值。
示例:
speed code animal
42 1 mammal
32 2 bird
6 4 lizard
0 3 fish
100 1 mammal
非常感谢任何帮助。
答案 0 :(得分:3)
animal <- data.frame('code' = c(1:4), 'class' = c('mammal','bird','fish','lizard'))
land.speed <- data.frame('speed' = c('42','32','6','0','100'), 'code' = c(1,2,4,3,1))
out <- merge(land.speed, animal, by = "code", all.x = TRUE)
out
# code speed class
# 1 1 42 mammal
# 2 1 100 mammal
# 3 2 32 bird
# 4 3 0 fish
# 5 4 6 lizard
这样做会带走您的land.speed
数据框,并通过匹配animal
变量合并code
数据框。假设这是您的实际数据框的简化版本,因此肯定会包含更多列,您应该查看by.x
,by.y
,all.x
,{{1} } {和all.y
all
参数以满足您的特定需求。
答案 1 :(得分:1)
您可以使用merge
功能
result<-merge(x=animal,y=land.speed,by="code",all=TRUE)
<强>输出强>:
code class speed
1 1 mammal 42
2 1 mammal 100
3 2 bird 32
4 3 fish 0
5 4 lizard 6
答案 2 :(得分:1)
我们可以使用match
。它应该更快
land.speed$animal <- animal$class[match(land.speed$code, animal$code)]
land.speed
# speed code animal
#1 42 1 mammal
#2 32 2 bird
#3 6 4 lizard
#4 0 3 fish
#5 100 1 mammal
或者,如果我们有匹配的代码&#39;两个数据集中的元素
land.speed$animal <- animal$class[land.speed$code]