我是R的新手(来自Stata世界)。为了节省时间,我正在尝试使用循环函数来生成数据帧(大约70,000行)内现有数据列的功能。现有列称为OrdersData $ timecount;我正在尝试自动化它的9个功能,即OrdersData $ timecount2 = OrdersData $ timecount ^ 2,OrdersData $ timecount3 = OrdersData $ timecount ^ 3,依此类推。我正在尝试将其全部用于命令:
i<-1;
for(i in 1:9){paste(OrdersData$timecount,"[i+1]",sep="")<-OrdersData$timecount^[i+1]}
我收到一个名为“text”的错误。我做错了什么?
答案 0 :(得分:3)
您需要停止在stata
中思考并使用R
成语。
这是一种有效的方法(并且会阻止你在stata
中思考)
DF <- data.frame(timeCount = seq(0,1,l=3))
# use lapply to create a list
# with elements timeCount^1, timeCount^2, .... etc
powered <- lapply(1:9, function(x,y) x^y, x = DF$timeCount)
# give names that make sense
names(powered) <- paste0('timeCount',1:9)
# convert to a data.frame
newDF <- as.data.frame(powered)
newDF
timeCount1 timeCount2 timeCount3 timeCount4 timeCount5 timeCount6 timeCount7 timeCount8 timeCount9
1 0.0 0.00 0.000 0.0000 0.00000 0.000000 0.0000000 0.00000000 0.000000000
2 0.5 0.25 0.125 0.0625 0.03125 0.015625 0.0078125 0.00390625 0.001953125
3 1.0 1.00 1.000 1.0000 1.00000 1.000000 1.0000000 1.00000000 1.000000000
@ Brandon的答案可能更容易理解,但在循环中增加data.frame将每次至少复制一次data.frame(内部)。
答案 1 :(得分:2)
您的错误来自于将<-
变量分配给字符串(而不是变量)。您可以使用assign
命令“创建”变量。请参阅?assign
和?get
(根据您目前的尝试,阅读有价值的学习经历)
但是你可以使用一个与你试图创建的东西相匹配的for循环。
for(i in 1:9) {
OrdersData[paste("timecount",i+1,sep="")] <- OrdersData$timecount^i
}
有时思考需要比输入更长的时间:
OrdersData$timecount2 <- OrdersData$timecount^2
OrdersData$timecount3 <- OrdersData$timecount^3
OrdersData$timecount4 <- OrdersData$timecount^4
OrdersData$timecount5 <- OrdersData$timecount^5
OrdersData$timecount6 <- OrdersData$timecount^6
OrdersData$timecount7 <- OrdersData$timecount^7
OrdersData$timecount8 <- OrdersData$timecount^8
OrdersData$timecount9 <- OrdersData$timecount^9