我试图仅根据df的4个元素来检查数据帧中的行是否相等。我将数据帧的子集分配给我想要比较的2行和4个元素,最后得到2个列表。
当我在2个列表中使用all.equal
或identical
时,它们不会返回为相等。但是,如果我遍历2个列表中的每个元素并使用“==”进行比较,则每个元素比较返回相等。
这是我正在使用的代码。
for (row in 1:nrow(df)) {
first <- df[row, c("elem1", "elem2", "elem3", "elem4")]
second <- df[row+1, c("elem1", "elem2", "elem3", "elem4")]
if (isTRUE(all.equal(first, second))) {
df[row, "diff_element"] <- 1
}
}
当我打印str(first)
和str(second)
时,它们是相同的。我无法弄清楚为什么至少all.equal不会返回true。
以下是df的一部分:
elem1 elem2 elem3 num1 num2 num3 num4 elem4 diff_element
1 103404 BRJ CJ 55.89 17.70005 107.017 77.0330 Car 0
2 103404 BRJ CJ 55.89 17.70005 107.017 77.0330 Car 0
3 355309 CLK JR 12.00 223.44000 23.000 20.2234 Train 1
这是我检查结构时得到的结果(前两行应该相等):
> str(first)
'data.frame': 1 obs. of 4 variables:
$ elem1: int 103404
$ elem2: Factor w/ 2 levels "BRJ","CLK": 1
$ elem3: Factor w/ 2 levels "CJ","JR": 1
$ elem4: Factor w/ 2 levels "Car","Train": 1
> str(second)
'data.frame': 1 obs. of 4 variables:
$ elem1: int 103404
$ elem2: Factor w/ 2 levels "BRJ","CLK": 1
$ elem3: Factor w/ 2 levels "CJ","JR": 1
$ elem4: Factor w/ 2 levels "Car","Train": 1