R: Создание функции для объединения двух столбцов

#r

#r

Вопрос:

Извините, если что-то похожее на мой вопрос уже было опубликовано, я не смог найти то, что ищу.

У меня есть набор данных с двумя столбцами, один со средними значениями и один со значениями sd. Я хотел бы создать третьи столбцы, которые были бы «mean (sd)». Я смог сделать это с помощью paste () без проблем. Теперь то, что я хотел бы сделать, это создать функцию для выполнения этого с различными наборами данных / переменными. У меня есть следующее:

 a=round(runif(20,0,50),2)
b=round(runif(20,0,1),2)
data<-cbind(a,b)

merge.meansd<-function(data,x,y,z){
  data$z <- paste(data[,x]," (",data[,y],")",sep = "")
}

merge.meansd(data,"a", "b","c")
  

Я получаю следующее, что я не могу решить:

Принудительное преобразование LHS в список

Есть идеи или решения моей проблемы?

Спасибо

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

1. Во-первых, $<- не может использоваться с матрицами (что вы получаете из cbind ). И, во-вторых, вы используете $<- неправильно в этом контексте. Сначала вам нужно выяснить, хотите ли вы матрицу или фрейм данных. Последнее кажется здесь более подходящим, поскольку вы добавляете символьный столбец.

Ответ №1:

Если вы хотите включить символьный столбец в ту же структуру данных, что и пару числовых векторов, вы почти наверняка захотите использовать фрейм данных, а не матрицу (как прокомментировал @RichScriven выше).

 merge.meansd <- function(dd,x,y,z) {
   dd <- as.data.frame(dd)
   dd[[z]] <- paste0(data[,x]," (",data[,y],")")
   ## or dd[[z]] <- sprintf("%f (%f)",dd[,x],d[,y])
   return(dd)
}

ddm <- merge.meansd(data,"a","b","c")
  

Также:

  • Я думаю, вы хотели вернуть весь фрейм данных, а не только объединенный столбец?
  • вы не можете использовать $ индексирование значением переменной, вам нужно [[ ]]