For循环和if语句r+;预分配
如果EA$相位中的值为1,则新矢量OCC中的等效位置必须为90。到目前为止,我有:For循环和if语句r+;预分配,r,if-statement,for-loop,R,If Statement,For Loop,如果EA$相位中的值为1,则新矢量OCC中的等效位置必须为90。到目前为止,我有: head(EA$phase) [1] 1 1 1 1 2 2 OCC <- vector(mode = "list", length = 580) #Pre-allocate OCC for(i in 1:length(EA$phase)) # For each element in EA$phase { if (EA$phase[i]=="1"){OCC[i]=90} #If the value o
head(EA$phase)
[1] 1 1 1 1 2 2
OCC <- vector(mode = "list", length = 580) #Pre-allocate OCC
for(i in 1:length(EA$phase)) # For each element in EA$phase
{
if (EA$phase[i]=="1"){OCC[i]=90} #If the value of EA$phase[1] is 1 then OCC[1]=90
if (EA$phase[i]=="2"){OCC[i]=90}
if (EA$phase[i]=="3"){OCC[i]=50}
if (EA$phase[i]=="4"){OCC[i]=70}
if (EA$phase[i]=="5"){OCC[i]=60}
if (EA$phase[i]=="6"){OCC[i]=50}
if (EA$phase[i]=="7"){OCC[i]=70}
if (EA$phase[i]=="8"){OCC[i]=70}
if (EA$phase[i]=="9"){OCC[i]=80}
if (EA$phase[i]=="10"){OCC[i]=80}
}
head(EA$阶段)
[1] 1 1 1 1 2 2
OCC您可以不使用for循环(也不需要预分配):
occ您可以不用for循环(也不用预分配):
occ试试看:
数据表
EA_DT尝试一下:
数据表
EA_DTEA$phase
在您的示例中有整数(不是字符)。因此,您必须比较if(EA$phase[i]==1).
等等。尝试创建一个类似data的查找表。表(V1=c(1,2,3,…),V2=c(90,90,50,…)
然后通过V1
和EA$phase
将其合并为整数(而非字符)。因此,您必须比较if(EA$phase[i]==1).
等等。尝试制作一个类似data.table(V1=c(1,2,3,…),V2=c(90,90,50,…)
的查找表,然后通过V1
和EA$phase
将其合并。非常感谢您为我回答这个问题,我非常感谢。看起来有很多方法可以做到这一点(我从不感到惊讶,但总是感到惊讶)。我将接受jogo的解决方案,因为尽管我(作为r的新手)发现这两种方法都很有效,但我欣赏这两行的简洁性。一点问题也没有,请记住,使用@jogo解决方案时,occ
向量需要与最高相位一样长,即即使给定单个EA$相位
equal 100occ
也需要100个元素长,因为EA$相位==100
将提取occ[100]元素。。。。使用查找表,您可以轻松完成:EA_-DF或:EA_-DF非常感谢您为我回答这个问题,我非常感谢。看起来有很多方法可以做到这一点(我从不感到惊讶,但总是感到惊讶)。我将接受jogo的解决方案,因为尽管我(作为r的新手)发现这两种方法都很有效,但我欣赏这两行的简洁性。一点问题也没有,请记住,使用@jogo解决方案时,occ
向量需要与最高相位一样长,即即使给定单个EA$相位
equal 100occ
也需要100个元素长,因为EA$相位==100
将提取occ[100]元素。。。。使用查找表,您可以轻松完成:EA_-DF或:EA_-DF谢谢您为我回答这个问题,我非常感谢。此外,我真的很欣赏简单解决方案的美妙之处,这正是我所希望的。你能为我澄清一下第二阶段到底发生了什么吗?我知道它是有效的,但我还不知道机制(目前):-)让我来做:)让我们假设EA$phase[1]
=3和EA$phase[2]
=5,假设occ[EA$phase]
会给你occ的第三和第五个元素,因为事实上你会告诉R给你occ[3]
和occ[5]
。感谢您为我回答这个问题,我非常感谢。此外,我真的很欣赏简单解决方案的美妙之处,这正是我所希望的。你能为我澄清一下第二阶段到底发生了什么吗?我知道它是有效的,但我还不知道机制(目前):-)让我来做:)让我们假设EA$phase[1]
=3和EA$phase[2]
=5,假设occ[EA$phase]
会给你occ的第三和第五个元素,因为事实上你会告诉R给你occ[3]
和occ[5]
。
occ <- c(90, 90, 50, 70, 60, 50, 70, 70, 80, 80)
OCC <- occ[EA$phase]
EA$OCC <- occ[EA$phase]
EA_DT <- data.table(phase = c(1,2,1,2,1,3,7,5))
lookup_DT <- data.table(V1 = c(1,2,3,4,5,6,7), V2 = c(90,90,50,70,60,50,70))
res1 <- merge(EA_DT, lookup_DT, by.x = "phase", by.y = "V1")
lookup_DT2 <- data.table(phase = c(1,2,3,4,5,6,7), OCC = c(90,90,50,70,60,50,70))
setkey(EA_DT, phase)
res2 <- merge(EA_DT, lookup_DT2)
res3 <- EA_DT[lookup_DT, on = c(phase = "V1"), nomatch = 0L]
setkey(EA_DT, phase)
res4 <- EA_DT[lookup_DT2, nomatch = 0L]
EA_DF <- data.frame(phase = c(1,2,1,2,1,3,7,5))
lookup_DF <- data.frame(V1 = c(1,2,3,4,5,6,7), V2 = c(90,90,50,70,60,50,70))
res5 <- merge(EA_DF, lookup_DF, by.x = "phase", by.y = "V1")
lookup_DF2 <- data.frame(phase = c(1,2,3,4,5,6,7), OCC = c(90,90,50,70,60,50,70))
res6 <- merge(EA_DF, lookup_DF2)