Запуск одной и той же функции для нескольких переменных с систематическими именами (т.е. на основе номера испытания) - PullRequest
1 голос
/ 03 июля 2019

Проведен эксперимент с несколькими испытаниями, широкоформатными данными (т. Е. Каждый субъект имеет строку, а информация, относящаяся к каждому из испытаний этого субъекта, содержится в столбцах).

Измерения, собранные для каждого испытания, идентичны, так что для каждого участника есть столбцы с одинаковыми именами, за которыми следует соответствующий номер испытания, например, x1, y1, x2, y2, где x и y - измерения, собранные вкаждое испытание и 1 и 2 представляют испытания 1 и 2 соответственно.

Я создаю несколько новых переменных на основе значений для каждого испытания, например, x1 и y1 должны быть объединены для создания x1y1 (определенные функции, вероятно, не имеют значения, поскольку я успешно написал их дляпервое испытание).Теперь я пытаюсь применить эти функции к нескольким испытаниям (которые опять-таки идентифицируются по номеру, который следует за именем переменной) без написания строки кода для каждого испытания 1: n, которая копирует код, который я написал для испытания 1.У меня вопрос, могу ли я использовать apply или цикл for, который просматривает имена столбцов для структуры / нумерации.

Предположим, я хочу сделать следующее:

XY_1 = paste0(X1,Y1)

, но для каждогопробный 1-н.XY_n = paste0(Xn,Yn).

Возможно, что-то вроде:

for (trial in c(1:50)){XY[trial] = paste0(X[trial], Y[trial])}

Я бы хотел, чтобы новые переменные выводились в виде столбцов в файле данных.Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 03 июля 2019

Я думаю, что вы ищете mapply, где вы можете применить функцию к векторам / спискам в группах:

v1 <- c("a","b","c")
v2 <- c("1","2","3")

paste_together <- function(X,Y) {
   paste0(X, Y)
}

Вызывается как:

mapply(paste_together, v1, v2)

, что дает:

 > result <- mapply(paste_together, v1, v2)
 > result
 a    b    c 
"a1" "b2" "c3" 

или, возможно:

 > result <- mapply(paste_together, v1, v2, USE.NAMES=F)
 > result
"a1" "b2" "c3" 

Я не совсем понял ваше последнее утверждение. Если вам нужно, чтобы результат был в одном столбце, преобразуйте его во фрейм данных:

> result <- data.frame(XpasteY=mapply(paste_together, v1, v2, USE.NAMES=F))
> result
  XpasteY
1      a1
2      b2
3      c3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...