我有一个包含 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 值?
谢谢您的帮助。
我有一个包含 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 值?
谢谢您的帮助。
您可以简单地使用merge
:
merge(df, key)[-1]
(-1
删除合并数据框中的 ID 列。)
> 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
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
你可以
merge(df,key,by="id" ,all = TRUE)
然后根据需要删除或更改列的名称。
您也可以使用连接功能:
df1 <- df %>%
full_join(key, by = 'id') %>%
select(-id)