как разделить столбец и это следующее в кадре данных - PullRequest
0 голосов
/ 31 августа 2018

Я попытался создать функцию, которая делит каждый столбец на следующие данные во фрейме данных, например, если у меня есть фрейм данных, подобный этому:

 [,1] [,2] [,3] [,4] [,5]
[1,]    1    4    7   10   13
[2,]    2    5    8   11   14
[3,]    3    6    9   12   15

Я хотел бы создать функцию, которая делит col1 на col2, col3 на col4 .... col (n-1) на col (n) до конца фрейма данных и печатает фрейм данных, который связывает все выходные списки.

Я создал функцию, которая разделяет столбец и следующее, но не является функцией цикла.

bigfunction<-function(data,n){
  n<-1
    data[,1]
    data[,n+1]
    d<-(data[,n]/data[,n+1])
   print(as.list(d))}

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Векторизация этого расчета!

df <- data.frame(a = 1:3, b = 4:6, c = 7:9, d = 10:12)

df[c(1,3)]/df[c(2,4)]
#     a         c
#1 0.25 0.7000000
#2 0.40 0.7272727
#3 0.50 0.7500000

divdf <- function(data) {
  data[seq(1,ncol(data),2)]/data[seq(2,ncol(data),2)]
}
divdf(df)
#     a         c
#1 0.25 0.7000000
#2 0.40 0.7272727
#3 0.50 0.7500000

Вы можете добавить дополнительную проверку ошибок, чтобы убедиться, что у вас всегда есть четное количество столбцов и т. Д., Но это базовая логика, к которой вы можете добавить.

0 голосов
/ 31 августа 2018

Вы можете попробовать что-то вроде этого:

fun1 <- function(df){
  for (i in 1:ncol(df)){
    if (i%%2 == 1){next}
    else{
      temp <- df[, i-1]/df[, i]
      temp_df <- cbind(temp_df, temp)
    }
  }

  return(temp_df)
}

df <- data.frame(a = 1:3, b = 4:6, c = 7:9, d = 10:12)
temp_df <- data.frame(id = 1:nrow(df))
new_df <- fun1(df)

Я создал временный фрейм данных для хранения cbind векторов. Позже вы можете удалить столбец id и изменить имена столбцов в соответствии с требованиями. Это предполагает, что у вас есть четное количество столбцов (если нет, то он просто проигнорирует последний)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...