У меня есть фрейм данных с именами столбцов, такими как:
abc_alpha = c(1,2,3,4)
abc_beta = c(5,6,7,8)
abc_char = c(9,10,11,12)
xyz_alpha = c(4,3,2,1)
xyz_beta = c(8,7,6,5)
xyz_char = c(12,11,10,9)
и мой фрейм данных (df):
abc_alpha abc_beta abc_char xyz_alpha xyz_beta xyz_char
1 5 9 4 8 12
2 6 10 3 7 11
3 7 11 2 6 10
4 8 12 1 5 9
Я хотел бы перебрать столбцы и сопоставитьстолбцы с одинаковым концом строк (после подчеркивания), взять среднее из двух совпадающих столбцов и добавить его в конец фрейма данных в качестве новой переменной (имя столбца для новой переменной будет соответствовать строке посленижнее подчеркивание).Я бы хотел использовать цикл вместо жесткого кодирования имен столбцов, поскольку в реальном наборе данных слишком много столбцов.
Ожидаемый результат будет:
abc_alpha abc_beta abc_char xyz_alpha xyz_beta xyz_char alpha beta char
1 5 9 4 8 12 2.5 6.5 10.5
2 6 10 3 7 11 2.5 6.5 10.5
3 7 11 2 6 10 2.5 6.5 10.5
4 8 12 1 5 9 2.5 6.5 10.5
Я написал первую часть функции цикла, но, кажется, не могу закончить, добавив новые столбцы в фрейм данных:
for (i in 1:ncol(df)) {
x <- (strsplit(names(df)[i], split = '_', fixed = T))[[1]][2]
Я просмотрел, возможно, похожие вопросы, но, поскольку я новичок в R, многие ответы, которые предлагают использовать семейство Apply, привели меня в замешательство, и я не смог адаптировать эти решения к своемуситуация.
Спасибо!