#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)