我有一个包含以下数据的数据框java.lang.IllegalArgumentException org.springframework.asm.ClassReader.(Unknown Source)
org.springframework.asm.ClassReader.(Unknown Source)
org.springframework.asm.ClassReader.(Unknown Source)
文件:
df
我试图添加两个新列并填写“是”' /'否'具有缺失值的记录的值。我的预期输出是:
ID P1 P2 Year Month A B
11084 23 43 2001 April 41.9 -99.99
67985 76 12 2001 May 6.9 -9.99
11084 34 64 2001 June -999 -99.99
34084 56 77 2001 July NA -99.99
11043 90 54 2001 August NA -99.99
23084 55 32 2001 September 50.8 -99.99
11084 77 14 2001 October 0 -99.99
54328 89 56 2001 November -999 -99.99
我是R.的新手。我试图通过以下方式使用简单的ID P1 P2 Year Month A B A_miss B_miss
11084 23 43 2001 April 41.9 -99.99 No Yes
67985 76 12 2001 May 6.9 123 No No
11084 34 64 2001 June -999 -99.99 Yes Yes
34084 56 77 2001 July NA -99.99 Yes Yes
11043 90 54 2001 August NA -99.99 Yes Yes
23084 55 32 2001 September 50.8 -99.99 No Yes
11084 77 14 2001 October 0 -99.99 No Yes
54328 89 56 2001 November -999 -99.99 Yes Yes
循环和for
条件来实现此目的:
if/else
我是第一次在A' A'列,但每次我尝试时只有for(i in length(df$A))
{
if(df$A[i] == -999 || df$A[i] == 'NA')
df$A_miss[i] <- 'Yes'
else
df$A_miss[i] <- 'No'
}
部分正在执行,并且没有&#39; No&#39;价值正在整个&#39; A_miss&#39;柱。我无法找出else
部分无法正常工作的原因。
我哪里错了?
答案 0 :(得分:3)
您的循环未正确定义。这个有效:
for (i in 1:length(df$A)) {
if(df$A[i] == -999 || is.na(df$A[i]) )
df$A_miss[i] <- 'Yes'
else
df$A_miss[i] <- 'No'
}
限制应设为(i in 1:length(df$A))
,而不是(i in length(df$A)
。希望这会有所帮助。
PS:正如您所看到的,@ Pascal指出的重要修正已在此处实施。
PPS:下面的版本应该比使用for
循环的代码快得多:
df$A_miss <- 'No'
df$A_miss[which(df$A==-999 | is.na(df$A)] <- 'Yes'
(我刚注意到这个解决方案与@Daniel Fischer先前提出的解决方案非常相似)
答案 1 :(得分:2)
矢量化版本:
var a: Boolean = _;
def someFunction: Boolean = true
while({ a = someFunction; a }) {
println("hi " + a)
}
答案 2 :(得分:0)
也许你可以试试这个,没有任何循环或if子句:
df$A[(df$A==-999)|(is.na(df$A))] <- "yes"
df$A[df$A!="yes"] <- "no"
答案 3 :(得分:0)
使用which命令可能会提高进程的速度:
df$A_miss[which(df$A==-999 | is.na(df$A))] <- 'Yes'
df$A_miss[which(df$A_miss!='Yes')] <- 'no'