将r中的两列与for循环进行比较?

时间:2015-10-10 20:49:46

标签: r loops dataframe

我在R中有一个带有两列的data.frame,我们将它们称为X1和X2。我想写一个for循环,比较X1< X2然后创建一个新列,这是两列中较小的一列。我熟悉javascript中的for循环,但R似乎让它变得困难。任何帮助将不胜感激,谢谢!

   X1   X2
   -3.0 42.0
   42.0  0.0
   -7.0 43.0
   -7.0 47.5
   -9.0 45.5
   -5.5 49.5
   -8.5 45.5
   -3.0 43.5
    0.0 -3.0
   49.5 -9.0
   43.5 -4.5
   -6.5 43.5
   -3.0 45.5

输出看起来像这样...

  X1   X2  X3
   -3.0 42.0 -3.0
   42.0  0.0  0.0
   -7.0 43.0 -7.0
   -7.0 47.5 -7.0
   -9.0 45.5 ... and so on
   -5.5 49.5
   -8.5 45.5
   -3.0 43.5
    0.0 -3.0
   49.5 -9.0
   43.5 -4.5
   -6.5 43.5
   -3.0 45.5

4 个答案:

答案 0 :(得分:4)

内置的方法:

OrderClauseExpression

R是关于矢量化而不是循环。

如果您不了解(并且无法找到)your_data$X3 = pmin(your_data$X1, your_data$X2) ,那么这将是另一种矢量化方式:

pmin

如果你真的想要一个your_data$X3 = ifelse(your_data$X1 < your_data$X2, X1, X2) 循环for,它会是这样的:

min

但请注意,这是尝试编写R代码,就像它的其他语言一样。它会慢一些,显然需要更多打字,对于习惯阅读R代码的人来说,它不太清楚。

答案 1 :(得分:3)

另一种选择是:

df$X3 <- apply(df, 1, min)

<强>输出

     X1   X2   X3
1  -3.0 42.0 -3.0
2  42.0  0.0  0.0
3  -7.0 43.0 -7.0
4  -7.0 47.5 -7.0
5  -9.0 45.5 -9.0
6  -5.5 49.5 -5.5
7  -8.5 45.5 -8.5
8  -3.0 43.5 -3.0
9   0.0 -3.0 -3.0
10 49.5 -9.0 -9.0
11 43.5 -4.5 -4.5
12 -6.5 43.5 -6.5
13 -3.0 45.5 -3.0

数据:

df <- sstructure(list(X1 = c(-3, 42, -7, -7, -9, -5.5, -8.5, -3, 0, 
      49.5, 43.5, -6.5, -3), X2 = c(42, 0, 43, 47.5, 45.5, 49.5, 45.5, 
      43.5, -3, -9, -4.5, 43.5, 45.5)), .Names = c("X1", "X2"), class = "data.frame", row.names = c(NA, 
     -13L))

答案 2 :(得分:0)

您可以使用ifelse语句,

#parent {
  width: 350px;
  height: 150px;
  overflow: hidden;
  background-color: #ddd;
}

#parent:before {
  content: '';
  height: 65%;
  float: left;
}

#pusher {
  width: 160px;
  height: 35%;
  float: left;
  clear: left;
  background-color: #aaa;
}

答案 3 :(得分:-1)

以下是我如何设法使用for循环来比较名为&#39; data&#39;。

的.csv文件中的两列
for (i in 1:nrow(data)) { 
    print(c(i, ifelse((as.character(data[i,1]) == as.character(data[i,2])),"match","mismatch"))) 
        { next } 
}