R: применить функцию к конкретным столбцам, сохраняя остальную часть фрейма данных
Я хотел бы узнать, как применять функции в определенных столбцах моего фреймворка без "исключения" других столбцов из моего df. Например, я хотел бы умножить некоторые конкретные столбцы на 1000 и оставить другие, как есть.
Используя функцию sapply, например, следующим образом:
a<-as.data.frame(sapply(table.xy[,1], function(x){x*1000}))
Я получаю новые dataframes с первым столбцом, умноженным на 1000, но без других столбцов, которые я не использовал в операции. Поэтому я попытался сделать это следующим образом:
a<-as.data.frame(sapply(table.xy, function(x) if (colnames=="columnA") {x/1000} else {x}))
но этот не сработал.
Мое обходное решение состояло в том, чтобы предоставить обе файлам данных еще одну строку с идентификаторами, а затем объединить старый фреймворк с вновь созданным, чтобы получить полный. Но я думаю, что должно быть лучшее решение. Не так ли?
Ответы
Ответ 1
Если вы хотите делать вычисления только на одном или нескольких столбцах, вы можете использовать transform
или просто индексировать его вручную:
# with transfrom:
df <- data.frame(A = 1:10, B = 1:10)
df <- transform(df, A = A*1000)
# Manually:
df <- data.frame(A = 1:10, B = 1:10)
df$A <- df$A * 1000
Ответ 2
Следующий код применит желаемую функцию к только указанным столбцам.
Я создаю простой фрейм данных в качестве воспроизводимого примера.
(df <- data.frame(x = 1, y = 1:10, z=11:20))
(df <- cbind(df[1], apply(df[2:3],2, function(x){x*1000})))
В принципе, используйте cbind()
для выбора столбцов, в которых вы не хотите, чтобы функция запускалась, а затем используйте apply()
с нужными функциями в целевых столбцах.
Ответ 3
В dplyr
мы будем использовать mutate_at
, в котором вы можете выбрать или исключить (путем добавления имени переменной со знаком "-" минус) определенные переменные.
Вы можете просто назвать функцию
df <- df %>%
mutate_at(vars(columnA), scale)
или создайте свой собственный
df <- df %>%
mutate_at(vars(columnA, columnC), function(x) {do this})