我有一个约2000万行文件,并且我试图在其上运行for循环。我等了整个周末,但还没有完成1%。
我正在尝试对每一行的一列进行计算。如果值为<0.5,它将采用该值并将其添加到新列中;否则,将采用该值并将其从1中减去,然后将该值添加到新列中。
for (i in 1: length(halflife$year)){
if(halflife$year[i] < 0.5){
halflife$month[i] = halflife$year[i]
} else{
halflife$month[i] = 1 - halflife$year[i]
}
}
应在month
上添加一个名称为halflife
的新列,且所有值均小于0.5
答案 0 :(得分:6)
使用data.table
包,应该会更快
library(data.table)
halflife = data.table(halflife)
halflife[year < 0.5, month := year]
halflife[year >= 0.5, month := 1 - year]
此外,如果您要从csv文件读取数据,请使用fread()
中的data.table
而不是read.csv()
。更快
答案 1 :(得分:2)
halflife$month = halflife$year
ind = (halflife$year >= 0.5)
halflife$month[ind] = 1 - halflife$year[ind]
答案 2 :(得分:0)
您可以尝试这个。
library(data.table)
halflife %>% data.table(.) %>% [,':='(ans = ifelse(year < 0.5, year, 1-year))]
如果您想学习data.table软件包,可以先从DataCamp课程中阅读正式备忘单。(https://s3.amazonaws.com/assets.datacamp.com/img/blog/data+table+cheat+sheet.pdf)
答案 3 :(得分:0)
data.table的相对较新的fifelse
函数可以在数百万行上以惊人的速度运行。试试:
library(data.table)
setDT(halflife)
halflife[, month := fifelse(year < 0.5, year, 1-year)]