簡體   English   中英

R重新編碼數據表中的字符列

[英]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-的答案還可以,但我選擇了其他方法。 list1dt唯一的一組通用名稱。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM