使用if语句和for循环

时间:2018-07-26 11:41:29

标签: r for-loop if-statement

我有一个数据框,看起来像:

pr     class
0,317   1
0,579   3
0,317   1
0,426   2
9,851   7
0,992   3
3,731   5
1,909   4
0,426   2
9,851   7
3,731   5
9,851   7

如果它不等于特定类中的特定值,则需要更改概率。例如,如果类别为1并且概率不是0.317,则需要将其更改为0.317。

我试图将一个for循环和if声明用于一个类,但是由于某种原因,它根本不起作用。

for(class in data_frame) {
  if(data_frame$class = 1) {
    data_frame$pr = 0.317
  }
}

我只尝试了一个类,因为我不知道如何在一个代码中对所有类都可以做到这一点(可能是另一个for循环吗?)。

2 个答案:

答案 0 :(得分:0)

不确定这是否最快,但是可以。

class <- c(1,2,2,1,2,2)  
p <- c()
for (i in 1:length(class)){
if(class[i] == 1) p[i] = .01
if(class[i] == 2) p[i] = .02
}
as.data.frame(rbind(p,class))

据我了解,您根本不需要原始值,对吗? 因此,只需使用包含您的类的向量类,然后使用将保留您的概率的空向量p即可。然后运行循环。对if子句使用==而不是=很重要,因为这会为对象分配一个值。最后一行将两个向量作为一个数据帧返回

答案 1 :(得分:0)

您的for循环可能不如您预期的那样:

for (class in data_frame) {
  print(class)
}
>
 [1] 0.317 0.579 0.317 0.426 9.851 0.992 3.731 1.909 0.426 9.851 3.731 9.851
 [1] 1 3 1 2 7 3 5 4 2 7 5 7

此版本可能是您想要的。 &&检查当前行的值是否也为0.317。

data_frame <- read.table("data.txt", header = TRUE)  # reads data

for (i in 1:nrow(data_frame)) {  # does one row at a time
  if (data_frame[i,]$class == 1  && data_frame[i,]$pr != 0.317) {  # replaces value in current row if TRUE and TRUE
    data_frame[i,]$pr <- 0.317
  }
}