[英]R recode a character column in a data table
我在數據表中有一列,其中包含變量的名稱。 列名是nutrient
。 為了便於顯示,我想在此列中將變量名稱(如“ vit_c_mg”)替換為“維生素C”。 我有一個新舊變量的列表。 我可以做類似的事情
for (i in 1:length(list1){
DT[nutrient %in% list1[i], nutrient := list2[i]]
}
但是必須有一個更好的data.table方法。
我碰巧有一個名為dt的小dta.table
dt
x y z d1 d2
1: 1 1 b 0.948027912 1
2: 2 2 a 0.926351588 1
3: 4 1 a 0.555704929 1
4: 4 1 a 0.987548561 1
5: 2 1 a 0.093421508 1
使用現有的列值來索引轉換表非常容易:
dt[ , z := c(a="v",b="w")[z] ]
> dt
x y z d1 d2
1: 1 1 w 0.948027912 1
2: 2 2 v 0.926351588 1
3: 4 1 v 0.555704929 1
4: 4 1 v 0.987548561 1
5: 2 1 v 0.093421508 1
nutrient
的值應與翻譯向量中的名稱匹配。 向量中列中的每個當前值都需要有一個名稱,否則您將獲得NA。 (在丟棄舊值之前,創建新列可能更安全。)
@ 42-的答案還可以,但我選擇了其他方法。 list1
是dt
唯一的一組通用名稱。 list2
是轉換后的名稱。 dt.temp
本質上是一個查找表。
dt.temp <- data.table(list1 = list1, list2 = list2]
dt <- merge(dt, dt.table, by.x = "nutrient", by.y = "list1")
dt[, nutrient:= NULL]
setnames(DT, old = "list2", new = "nutrient]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.