Сравнение столбцов, чтобы проверить, совпадают ли они из разных

#r

#r

Вопрос:

Я пытаюсь сравнить столбцы, чтобы сравнить разные значения в двух столбцах. Я думал, что это будет прямолинейно, но я столкнулся с проблемой, которую, похоже, не могу понять. То, что я пытаюсь сделать, это просто сравнить два столбца, каждый столбец имеет размер файлов. Первый столбец — это размер файла в базе данных a, а второй столбец — размер того же файла в базе данных b. Вот код, который я запускаю для сравнения столбцов.

 df$ready.to.delete <- ifelse(df$V1.x > df$V1.y, 'FALSE',
                                                   ifelse(df$V1.x < df$V1.y, 'TRUE', 'TIE'))
 

По какой-либо причине иногда, когда столбец V1.y больше V1.x , значения помечаются как FALSE . С другой стороны, иногда значение when V1.x больше, чем V1.y значения помечаются как TRUE . Я понятия не имею, что здесь происходит. Вот пример моего фрейма данных. Возможно, вам будет легче работать / понимать, о чем я говорю, если вы это увидите.

 df <- structure(list(V1.x = c("1449", "1449", "1449", "1449", "1449", 
"64903263796", "11955", "46480455130", "49692901057", "11977", 
"733441", "793914", "35752752006", "705220", "916127", "6483602181"
), V1.y = c("1449", "1449", "1449", "1449", "1449", "8235617", 
"46058278195", "7459346", "7451650", "49743769176", "54429092612", 
"63543035754", "1024458", "118130416321", "117244583843", "4463704"
), ready.to.delete = c("TIE", "TIE", "TIE", "TIE", "TIE", "TRUE", 
"TRUE", "TRUE", "TRUE", "TRUE", "FALSE", "FALSE", "FALSE", "FALSE", 
"FALSE", "FALSE")), .Names = c("V1.x", "V1.y", "ready.to.delete"
), row.names = c(NA, -16L), class = "data.frame")
 

Ответ №1:

Ваши столбцы character и оцениваются как таковые:

 df %>% 
  mutate(across(everything(), as.numeric),
         ready.to.delete = case_when(V1.x > V1.y ~ "FALSE",
                                     V1.x < V1.y ~ "TRUE",
                                     TRUE ~ "TIE"))
 

Это дает нам:

           V1.x         V1.y ready.to.delete
1         1449         1449             TIE
2         1449         1449             TIE
3         1449         1449             TIE
4         1449         1449             TIE
5         1449         1449             TIE
6  64903263796      8235617           FALSE
7        11955  46058278195            TRUE
8  46480455130      7459346           FALSE
9  49692901057      7451650           FALSE
10       11977  49743769176            TRUE
11      733441  54429092612            TRUE
12      793914  63543035754            TRUE
13 35752752006      1024458           FALSE
14      705220 118130416321            TRUE
15      916127 117244583843            TRUE
16  6483602181      4463704           FALSE
 

Вот пример того, что происходит:

 df <- data.frame(numbers_as_characters = c("9", "100000"))

df %>% 
  mutate(max_value = ifelse(numbers_as_characters == max(numbers_as_characters), T, F))

  numbers_as_characters max_value
1                     9      TRUE
2                100000     FALSE
 

Комментарии:

1. Ах да, это работает отлично. По какой-то причине в какой-то момент я меняю эти столбцы на символы. Я думаю, это потому NA , что в некоторых из них у меня было s. Я просто заменил NA s на нули, и то, что вы написали, и то, что я написал, оба работали отлично.