[英]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.x
, by.y
, all.x
, all.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.