#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")
Также:
- Я думаю, вы хотели вернуть весь фрейм данных, а не только объединенный столбец?
- вы не можете использовать
$
индексирование значением переменной, вам нужно[[ ]]