【问题标题】:R Data.Table Recode Many ColumnsR Data.Table 重新编码许多列
【发布时间】:2021-02-17 18:05:43
【问题描述】:
DATA=data.table(X1=c("Yes", "Maybe", "No", "Yes"), X7a=c("Yes", "Maybe", "No", "Yes"),
X1_A = c("Yes", NA, "No", "Yes"),
X1_B = c(1,NA,0,1))
FIX=c('X1','X7')

我有 'DATA' 包含约 100 列,例如 'X1' 和 'X7a' 我首先希望创建一个向量来存储我希望重新编码的列,例如 FIX=c('X1','X7 ')。然后我希望使用 data.table 用这个规则重新编码 'FIX' 中的列:

例如,对于 X1_A,将 X1 保留原样,但将“Maybe”替换为 NA。

对于 X1_B,例如重新编码 X1,因此 Yes = 1,No = 0,Maybe 为 NA

【问题讨论】:

  • 听起来你认为你需要两件事:要修改的向量/变量列表,以及要在它们上运行的函数列表。但是,在您的示例中,没有重叠交互:FIX[1] 具有 FUN[1](其中 FUN 可能是函数列表?),FIX[2] 具有 FUN[2]。总是这样完美的一对一,还是你曾经对FIX 中的多个值运行类似_A 的函数?
  • @akrun 你有 data.table 解决方案来做这个吗?

标签: r if-statement data.table recode


【解决方案1】:

这是怎么回事?感觉应该有更好的方法将它加入到规则表中,但如果不进行 100 次连接或为 100 个变量的每个可能排列创建一个表,我就不太明白如何做到这一点。

DATA=data.table(X1=c("Yes", "Maybe", "No", "Yes"), X7=c("Yes", "Maybe", "No", "Yes"))
FIX = c("X1", "X7") #or names(DATA)

style_A_function = function(x) fifelse(x == "Maybe", NA_character_, x)
style_B_function = function(x) fifelse(x == "Yes", 1, fifelse(x == "No", 0, fifelse(x == "Maybe", NA_integer_, 99)))

DATA[, paste0(FIX, c('_A')) := style_A_function(get(FIX))]
DATA[, paste0(FIX, c('_B')) := style_B_function(get(FIX))]

【讨论】:

    猜你喜欢
    • 2015-10-21
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    • 2020-01-26
    • 1970-01-01
    • 2013-09-28
    相关资源
    最近更新 更多