在 ifelse R 中粘贴 0

paste0 in ifelse R

我尝试在 ifelse() 中使用 paste0 在数据 table 中创建条件新变量。我使用的代码如下:

data[, paste0("inc_2014_",i) := ifelse(paste0("testvar",i) == 2014, 1, 0)]

这不起作用。没有错误消息,但是 inc_2014_i 的值(在我的测试用例 inc_2014_1 中)都是 0 而应该是几百个 1.

如果我测试

data[, paste0("inc_2014_",i) := ifelse(testvar1 == 2014, 1, 0)]

它工作正常。

如果我测试

paste0("testvar",i)

我得到了正确的变量作为输出。

我做错了什么?

您需要遍历列来定义 i,也许您可​​以尝试:

for(i in 1:length(grep("inc_2014_", colnames(data))))
{
    data[, paste0("inc_2014_",i) := ifelse(paste0("testvar",i) == 2014, 1, 0)]
}

它不起作用,因为您试图将 ifelse 中的变量作为字符串调用。

假设 i = 1,paste0("testvar",i) 的结果是 "testvar1" 但 ifelse 需要 testvar1,而不是字符串。

按如下方式使用函数 get(),它应该可以工作。

data[, paste0("inc_2014_",i) := ifelse(get(paste0("testvar",i)) == 2014, 1, 0)]