lapply — присвоить определенное значение другим столбцам в той же строке в data.frames

#r #dataframe #lapply

#r #dataframe #lapply

Вопрос:

У меня есть список с более чем 100 data.frames, в каждом из которых по 3 столбца.

Вот пример одного из data.frames:

 [[6]]
             V1        V2        V3
2         12002                    
9   05 Jan 1974   404.074     2.940
10  12 Jan 1974   477.433     3.235
11  18 Jan 1974   443.135     3.099
12  30 Jan 1974   556.402     3.537
13  22 Nov 1974   534.586     3.455
  

Что я хочу сделать, так это скопировать значение первой строки в первом столбце в два других значения первой строки в двух других столбцах.

Мой результат для всех data.frames, содержащихся в списке, должен быть:

 [[6]]
             V1        V2        V3
2         12002     12002     12002         
9   05 Jan 1974   404.074     2.940
10  12 Jan 1974   477.433     3.235
11  18 Jan 1974   443.135     3.099
12  30 Jan 1974   556.402     3.537
13  22 Nov 1974   534.586     3.455
  

примечание.b. значения для копирования различны для каждого data.frame

Я попытался сделать это сначала для одного data.frame (без использования lapply ), и это действительно работает:

 list[[1]]$V2[1] = list[[1]]$V1[1]
  

Но когда я пытаюсь сделать это с помощью lapply функции, это больше не работает:

 list = lapply(list, function(x) x$V2[1] = x$V1[1])
  

Что не так с моим кодом?

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

1. одна вещь, на которую следует обратить внимание, — это не называть свой список ‘list’.

2. спасибо, я буду иметь это в виду.

Ответ №1:

Вам нужно вернуть весь df после назначения.

 list <- lapply(list, function(x) {
    x[1,] <- x$V1[1]
    x
}
  

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

1. это здорово! Я всегда забывал вернуть df!

Ответ №2:

аналогично emilliman5, вот пример

 d <- data.frame(x = 1:3, y = 4:6)
l <- list(d, d)
do_this <- function(dat) {
  dat[1,2] <- dat[1,1]
  return(dat)
}
lapply(l, do_this)