Я пытаюсь сделать сравнение во фрейме данных сразу по нескольким строкам. Иногда я говорю правду, когда думаю, что не должен...
df<-data.frame(x=c(1,4,3,4,6,7,4,7,4,2),y=c(8,5,3,7,8,4,1,3,0,2))
df[,c(1,2)]<c(4,5)
Пример вывода:
x y
[1,] TRUE FALSE
[2,] TRUE FALSE
[3,] TRUE TRUE
[4,] TRUE FALSE
[5,] FALSE FALSE
[6,] FALSE TRUE
[7,] FALSE TRUE
[8,] FALSE TRUE
[9,] FALSE TRUE
[10,] TRUE TRUE
Что не так со 2-м рядом? 4 не меньше 4, так почему у нас ИСТИНА под "x"?
Я пропустил что-то очевидное здесь?
Хорошо, спасибо за разъяснение. Пожалуйста, проверьте решение ниже. Я неправильно оценил это, как и ожидалось
Круто, спасибо за это. list() действительно решил проблему.
list
каждый элемент будет действовать как единое целое. ТАК, переработка происходит для каждого элемента отдельно
Мы можем обернуть list
, и это должно сработать.
df < list(4, 5)
-выход
# x y
# [1,] TRUE FALSE
# [2,] FALSE FALSE
# [3,] TRUE TRUE
# [4,] FALSE FALSE
# [5,] FALSE FALSE
# [6,] FALSE TRUE
# [7,] FALSE TRUE
# [8,] FALSE TRUE
# [9,] FALSE TRUE
#[10,] TRUE TRUE
Или другой удобный вариант sweep
sweep(df, 2, c(4, 5), `<`)
Или, если мы rep
слим вектор, чтобы сделать длины одинаковыми, тогда это тоже сработает.
df < c(4, 5)[col(df)]
Если это vector
, проблема в том, что повторение происходит по столбцам, поэтому первый элемент 4 сравнивается с первым значением первого столбца, затем 5 со вторым значением первого столбца и так далее...
Ах, да, вывод, который я дал выше, - это то, что я получаю, а не то, что я ожидал. Я думаю, что ответ @akrun об использовании списка подойдет!