我的数据表如下:
head(data)
Date AI AGI ADI ASI ARI ERI NVRI SRI FRI IRI
1: 1991-09-06 NA 2094.19 NA NA NA NA NA NA NA NA
2: 1991-09-13 NA 2204.94 NA NA NA NA NA NA NA NA
3: 1991-09-20 NA 2339.10 NA NA NA NA NA NA NA NA
4: 1991-09-27 NA 2387.81 NA NA NA NA NA NA NA NA
5: 1991-10-04 NA 2459.94 NA NA NA NA NA NA NA NA
6: 1991-10-11 NA 2571.07 NA NA NA NA NA NA NA NA
不要担心NAs。我想要做的是为日期之外的每个列创建一个“百分比更改”列。
到目前为止我所做的是:
names_no_date <- unique(names(data))[!unique(names(data)) %in% "Date"]
for (i in names_no_date){
data_ch <- data[, paste0(i, "ch") := i/shift(i, n = 1, type = "lag")-1]}
我收到错误:
Error in i/shift(i, n = 1, type = "lag") :
non-numeric argument to binary operator
我想知道如何解决这个错误?
答案 0 :(得分:4)
i
是一个字符串,因此您尝试在i/shift(i, n = 1, type = "lag")
中划分字符串:
> "AI"/NA
Error in "AI"/NA : non-numeric argument to binary operator
相反,做
for (i in names_no_date){
data[, paste0(i, "ch") := get(i)/shift(get(i), n = 1, type = "lag")-1]
}
另见Referring to data.table columns by names saved in variables。
编辑:@Frank在评论中写道,产生OP输出的更简洁方法是
data[, paste0(names_no_date, "_pch") := .SD/shift(.SD) - 1, .SDcols=names_no_date]