У меня есть df, подобный этому
name <- c("Fred","Mark","Jen","Simon","Ed")
a_or_b <- c("a","a","b","a","b")
abc_ah_one <- c(3,5,2,4,7)
abc_bh_one <- c(5,4,1,9,8)
abc_ah_two <- c(2,1,3,7,6)
abc_bh_two <- c(3,6,8,8,5)
abc_ah_three <- c(5,4,7,6,2)
abc_bh_three <- c(9,7,2,1,4)
def_ah_one <- c(1,3,9,2,7)
def_bh_one <- c(2,8,4,6,1)
def_ah_two <- c(4,7,3,2,5)
def_bh_two <- c(5,2,9,8,3)
def_ah_three <- c(8,5,3,5,2)
def_bh_three <- c(2,7,4,3,0)
df <- data.frame(name,a_or_b,abc_ah_one,abc_bh_one,abc_ah_two,abc_bh_two,
abc_ah_three,abc_bh_three,def_ah_one,def_bh_one,
def_ah_two,def_bh_two,def_ah_three,def_bh_three)
Я хочу использовать значение в столбце "a_or_b", чтобы выбрать значения в каждом из соответствующих столбцов "ah / bh" для каждого "abc" (один, два и три) и поместите его в новый фрейм данных.Например, Фред будет иметь значения 3, 2 и 5 в своем ряду в новом df.Эти значения представляют значения каждой из его категорий «ах» для столбцов abc.Джен, у которой есть «b» в ее столбце a_or_b, будет иметь все свои значения «bh» из своих столбцов abc для своей строки в новом df.Вот как будет выглядеть мой желаемый результат:
combo_one <- c(3,5,1,4,8)
combo_two <- c(2,1,8,7,5)
combo_three <- c(5,4,2,6,4)
df2 <- data.frame(name,a_or_b,combo_one,combo_two,combo_three)
Я попытался сделать это с помощью sapply.Следующее дает мне матрицу правильных столбцов правильных индексов df[grep("abc",colnames(df),fixed=TRUE)]
для каждой строки:
sapply(paste0(df$a_or_b,"h"),grep,colnames(df[grep("abc",colnames(df),fixed=TRUE)]))