Период используется для конкатенации строк. Простой пример, чтобы превратить две строковые переменные в одну переменную:
$full = $part1 . $part2;
В вашем примере вы хотели бы сделать:
$result = $data1 . ' ' . $data2;
Вы заметите, что я добавил строка одного пробела между двумя переменными. Это связано с тем, что ваш оригинал $data1
не закончился пробелом. Если бы вы объединили их без него, ваша переменная $result
в итоге выглядела бы как the color isred
.
Попробуйте преобразовать ваш df в матрицу.
df <- data.frame(a=rnorm(1000),b=rnorm(1000))
m <- as.matrix(df)
m[m<0] <- 0
df <- as.data.frame(m)
Как ваш первоначальный подход, так и текущий ответ создают объект с тем же размером, что и m
(или df
) при создании m<0
(матричный подход быстрее, потому что меньше внутреннего копирования с [<-
по сравнению с [<-.data.frame
Вы можете использовать lapply
и replace
, тогда вы смотрите только на вектор или length (nrow(df))
каждый раз и не копируете так много
df <- as.data.frame(lapply(df, function(x){replace(x, x <0,0)})
Если вы используете data.table
, тогда большая часть неэффективности времени работы data.frame
памяти (и) будет удалена. Это было бы идеально для большой ситуации с данными как ваш.
library(data.table)
# this really shouldn't be
DT <- lapply(df, function(x){replace(x, x <0,0)})
# change to data.table
setattr(DT, 'class', c('data.table','data.frame'))
# or
# DT <- as.data.table(df, function(x){replace(x, x <0,0)})
Вы можете установить ключи во всех столбцах, а затем заменить по ссылке на значения клавиш менее 0