在 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)]
我尝试在 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)]