3

我有一个包含 id 和结果的数据框:

df <- data.frame(id=c(1,4,3,3,2,1),result=c(90,75,45,56,78,66))
df

我还有一个键,其中包含每个 id 的名称:

key <- data.frame(id=c(1:4),name=c("Jon","Fred","Jane","Jim"))
key 

如何用键中的名称值替换 df 中的 id 值?

谢谢您的帮助。

4

5 回答 5

5

您可以简单地使用merge

merge(df, key)[-1]

-1删除合并数据框中的 ID 列。)

于 2013-01-19T18:54:29.593 回答
4
> df[["id"]] <- key[ match(df[['id']], key[['id']] ) , 'name']
> df
    id result
1  Jon     90
2  Jim     75
3 Jane     45
4 Jane     56
5 Fred     78
6  Jon     66
于 2013-01-19T19:04:07.893 回答
2
 df$id <- ave(df,df$id,
        FUN = function(x)  as.character(key$name[key$id==unique(x$id)]))[1]

df
    id result
1  Jon     90
2  Jim     75
3 Jane     45
4 Jane     56
5 Fred     78
6  Jon     66
于 2013-01-19T19:15:50.380 回答
2

你可以

merge(df,key,by="id" ,all = TRUE)

然后根据需要删除或更改列的名称。

于 2013-01-19T18:53:25.070 回答
2

您也可以使用连接功能:

df1 <- df %>%
  full_join(key, by = 'id') %>%
  select(-id)
于 2018-02-07T18:23:25.337 回答