索引R中的另一个数据帧

时间:2016-01-27 21:41:28

标签: r indexing dataframe

您有一个动物类数据框:

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

非常感谢任何帮助。

3 个答案:

答案 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.xby.yall.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]
相关问题