【发布时间】:2020-08-05 08:47:41
【问题描述】:
这是我上一个问题的后续: Code in R to conditionally subtract columns in data frames
我现在想将给定的解决方案应用于我之前的问题
cols <- grep('^\\d+$', names(df), value = TRUE)
new_cols <- paste0(cols, '_corrected')
df[new_cols] <- df[cols] - df[paste0('Background_', cols)]
df[c("Wavelength", new_cols)]
到列表中的每个数据框。我导入了一个 excel 文件的所有工作表,以便每个工作表都使用此代码成为列表中的一个数据框(由 Read all worksheets in an Excel workbook into an R list with data.frames 的最佳答案提供):
read_excel_allsheets <- function(filename, tibble = FALSE) {
sheets <- readxl::excel_sheets(filename)
x <- lapply(sheets, function(X) readxl::read_excel(filename, sheet = X))
if(!tibble) x <- lapply(x, as.data.frame)
names(x) <- sheets
x
}
mysheets <- read_excel_allsheets(file.choose())
如何将第一个代码框应用到我的数据框列表?
我想从这样的事情中得到:
df_1 <- structure(list(Wavelength = 300:301, Background_1 = c(5L, 3L),
`1` = c(11L, 12L), Background_2 = c(4L, 5L), `2` = c(12L, 10L)),
class = "data.frame", row.names = c(NA, -2L))
df_2 <- structure(list(Wavelength = 300:301, Background_1 = c(6L, 4L),
`1` = c(10L, 13L), Background_2 = c(5L, 6L), `2` = c(11L, 11L),
Background_3 = c(4L, 6L), `3` = c(13L, 13L)),
class = "data.frame", row.names = c(NA, -2L))
df_list <- list(df_1, df_2)
这样的:
df_1_corrected <- structure(list(Wavelength = 300:301, `1_corrected` = c(6L, 9L),
`2_corrected` = c(8L, 5L)),
class = "data.frame", row.names = c(NA, -2L))
df_2_corrected <- structure(list(Wavelength =300:301, `1_corrected` = c(4L, 9L),
`2_corrected` = c(6L, 5L),
`3_corrected` = c(9L, 7L)),
class = "data.frame", row.names = c(NA, -2L))
df_corrected_list <- list(df_1_corrected, df_2_corrected)
实际数据摘录
Wavelength Background 1 1 Background 2 2 Background 3 3
300 273290.0 337670.0 276740.0 397530 288500.0 367480.0
301 299126.7 375143.3 299273.3 432250 310313.3 394796.7
我已经阅读了 lapply 函数将用于此,但我以前从未使用过它,因为我是 R 的初学者。
非常感谢您的帮助!
【问题讨论】:
标签: r excel list dataframe lapply