Код в R для условного вычитания столбцов во фреймах данных - PullRequest
0 голосов
/ 03 августа 2020

У меня есть кадр данных из измерения, где для каждого измерения также измеряется фон:

 Wavelength   Background_1   1   Background_2   2   ...
 300          5              11  4              12  ...
 301          3              12  5              10  ...
 ...          ...            ... ...            ... ...

Я хочу вычесть соответствующий столбец «Background_xyz» из соответствующего столбца (например, вычесть «Background_1» от «1». Тогда это будет выглядеть так:

 Wavelength   1_corrected   2_corrected   ...
 300          6             8             ...
 301          9             5             ...
 ...          ...           ...           ...

Я могу получить это без проблем. Проблема в том, что иногда бывает 3 измерения, поэтому 3 столбца с фоном и «реальными» данными каждый , иногда есть только 1 или 2 измерения. Я ищу способ получить R "правильных" столбцов путем вычитания фона независимо от количества столбцов, чтобы сделать это. Я подумал, может быть, функция if проверяет столбец имена подойдут для уловки, но у меня еще нет опыта, чтобы придумать способ сделать это. Помощь очень признательна!

1 Ответ

1 голос
/ 03 августа 2020

Сначала вы можете найти столбцы, которые имеют только числа, используя grep, затем вы можете получить соответствующие столбцы "Background" и вычесть.

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

#  Wavelength 1_corrected 2_corrected
#1        300           6           8
#2        301           9           5

данные

df <- structure(list(Wavelength = 300:301, Background_1 = c(5L, 3L), 
`1` = 11:12, Background_2 = 4:5, `2` = c(12L, 10L)), 
class = "data.frame", row.names = c(NA, -2L))
...