簡體   English   中英

在R中索引另一個數據幀

[英]Indexing another data frame in R

對於動物類別,您有一個數據框:

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

任何幫助將不勝感激。

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數據框並通過匹配code變量在animal數據框上合並。 假設這是真實數據幀的簡化版本,因此肯定要包含更多列,則應查看by.xby.yall.xall.y以及all merge到的參數滿足您的特定需求。

您可以使用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

我們可以使用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

或者,如果我們在兩個數據集中都有匹配的“代碼”元素

land.speed$animal <- animal$class[land.speed$code]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM