根据行余数分配值

时间:2014-08-27 13:54:30

标签: r

我想做以下事情。我正在计算数据集中总行数的余数除以20并基于余数(0,1,2,... 19)我将x1,x2,x3等值赋给变量调用的 BLF 即可。例如,如果第n行的剩余部分&如果第n行的剩余部分为20,则0为0然后为blf = 0.8。 20是1然后blf = 0.7,如果第n行的剩余部分和20是2或3,那么blf = 0.6,依此类推。当我在R 中执行此操作时(我的代码在下面,可以在此处找到示例数据集(Rdata和csv):http://goo.gl/qgbeIJ我收到以下错误:

  

ifelse错误(sampledat [1:nrow(sampledat)%% 20 == 0],0.8,blf):    (list)对象不能被强制键入' logical'

sampledat$blf <- 0.1   
sampledat$blf <- with(sampledat, ifelse(sampledat[1:nrow(sampledat)%%20==0],0.8,blf ))
sampledat$blf <- with(sampledat, ifelse(sampledat[1:nrow(sampledat)%%20==1],0.7,blf ))
sampledat$blf <- with(sampledat, ifelse(sampledat[1:nrow(sampledat)%%20==2] | sampledat[1:nrow(sampledat)%%20==3] ,0.6,blf ))

一种可能的解决方案是将余数存储为一个名为保持的单独变量,然后根据矢量值,执行我的ifelse操作,但我想知道是否有办法在一个步。

sampledat$remain <- (1:nrow(sampledat))%%20
sampledat$blf <- 0.1   
sampledat$blf <- with(sampledat, ifelse(remain==0,0.8,blf ))
sampledat$blf <- with(sampledat, ifelse(remain==1,0.7,blf ))
sampledat$blf <- with(sampledat, ifelse(remain==2 | remain==3 ,0.6,blf ))

任何见解都将不胜感激。

TIA, 克里希南

1 个答案:

答案 0 :(得分:2)

你没有说过3分之后会发生什么,所以我用了0.0。我这是在两步(易于理解)的过程中完成的:

answers=c(0.8,0.7,0.6,0.6,0.0,
      0.0,0.0,0.0,0.0,0.0,
      0.0,0.0,0.0,0.0,0.0,
      0.0,0.0,0.0,0.0,0.0)

sampledata$blf<-answers[(as.numeric(rownames(sampledata))%%20)+1]

您可以根据需要修改answers数组。

相关问题