[英]compare two columns in r with a for loop?
我在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
内置方法:
your_data$X3 = pmin(your_data$X1, your_data$X2)
R是关于向量化而不是循环。
如果您不了解(也找不到) pmin
,这将是另一种矢量化的方法:
your_data$X3 = ifelse(your_data$X1 < your_data$X2, X1, X2)
如果您真的想使用min
进行for
循环,它将如下所示:
your_data$X3 = NA # initialize the column
for (i in 1:nrow(your_data)) {
your_data$X3[i] = min(your_data$X1[i], your_data$X2[i])
}
但是请注意,这是在尝试像其他语言一样编写R代码。 这样会比较慢,显然需要更多的键入操作,而对于那些曾经阅读过R代码的人来说,它还不清楚。
另一个选择是:
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))
您可以使用ifelse语句,
df[,3] <- ifelse(df[,1] < df[,2], df[,1],df[,2])
这是我设法使用for循环比较.csv文件中名为“数据”的两列的方法:
for (i in 1:nrow(data)) {
print(c(i, ifelse((as.character(data[i,1]) == as.character(data[i,2])),"match","mismatch")))
{ next }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.