![](/img/trans.png)
[英]Replace all specific values in data.frame with values from another data.frame sequentially R
[英]R, replace values in a data.frame by values from another data.frame + dynamic columns
最好
基本上,我有一個表數據和一個較小的表詞匯表 。 我想擁有的是, 詞匯表的值可以很好地映射到數據值上。 而且這在函數內,可以動態地+/-使用
鑒於:
dt : data.csv
V1____V2___sex__V4__V5_
abc abc jeny abc 123
abc abc eric abc 123
abc abc bob abc 123
vocabulary1: sex.csv
old___new
jeny f
eric m
bob m
想要的結果:
V1____V2___sex__V4__V5_
abc abc f abc 123
abc abc m abc 123
abc abc m abc 123
我有什么
replace_by_vocabulary <- function(dt,voc,col_name){
dt[,col_name] <- tolower(dt[,col_name])
**** something something ***
return(dt)
}
我想如何使用它...
dt <- replace_by_vocabulary(dt,vocabulary1,"sex")
dt <- replace_by_vocabulary(dt,vocabulary2,"date")
dt <- replace_by_vocabulary(dt,vocabulary3,"mood")
merge
的另一種選擇更符合您的需求:
replace_by_vocabulary <- function(dt,voc,col_name){
col <- which(colnames(dt) == col_name)
dt[,col] <- voc$new[match(tolower(dt[,col]), voc$old)]
return(dt)
}
您要首先從輸入的col_name
字符串中找到dt
的列。 然后,使用match
來查找voc$old
的行索引與tolower(dt[,col])
的行索引匹配,並使用這些索引從voc$new
檢索替換值。 在這里,我們在函數中動態地將dt[,col]
列轉換為所有小寫字母,就像在示例代碼中一樣,以匹配詞匯表中的小寫字母數據。 與merge
相比的優勢在於,我們不必隨后重命名和刪除列即可獲得所需的結果。
使用數據:
replace_by_vocabulary(dt,vocabulary,"sex")
## V1 V2 sex V4 V5
##1 abc abc f abc 123
##2 abc abc m abc 123
##3 abc abc m abc 123
您是否考慮過合並,然后刪除不需要的列? 像這樣
dt<-merge(x=dt, y=vocabulary1, by.x="sex", by.y="old")
dt<-dt %>%
select(-sex) %>%
mutate(sex=old)
這篇文章似乎與以下所列內容重復。
使用合並功能,您應該能夠設計出一個功能來完成您想做的事情:
string = c("abc", "abc", "abc")
names = c("jeny", "eric", "bob")
sex = c("f", "m", "m")
data = data.frame(cbind(string, string, names, string, c(1, 2, 3)))
vocabulary1 = data.frame(cbind(names, sex))
dt = merge(data, vocabulary1, by.x = "names")
dt
如果我理解您的目標正確,那么您想將兩個data.frame合並在一起嗎? 你應該看看?merge
例如:
merge(x = dt, y = vocabulary1, by.x = "sex", by.y = "old")
如果您需要動態功能,則可以這樣做
replace_by_vocabulary <- function(dt,voc,col_name){
merged_df <- merge(x = dt, y = voc, by.x = "sex", by.y = col_name)
return(merged_df)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.