#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 на нули, и то, что вы написали, и то, что я написал, оба работали отлично.