2016-09-29 3 views
3

У меня есть dataframe (Df), как этотв R, как применить значение столбца для нескольких столбцов в одной и той же кадра данных

n g count s_a s_b s_c ..... 
T1 gb 10000 0 1 0 
T1 ga,gb 15000 1 1 0 

И я посмотрел на значения в S_A ... s_n в см, который является самым высоким п

top_n <- names(sort(colSums(df[4:ncol(df]), decreasing=TRUE))[1:n] 

Значением top_n является именем столбца, который имеет colsum (ColName) в верхнем N

Я хочу использовать результаты top_n для обновления каждого столбца, имя = для top_n со значением в столбце count

n g count s_a s_b s_c ..... 
T1 gb 10000 0  10000 0 
T1 ga,gb 15000 15000 15000 0 
+4

'df [, -1: -3] <- df $ count * df [, -1: -3]' – alistaire

ответ

0

Мы можем использовать lapply в цикле по столбцам интереса (4:ncol(df)), умножить его на «количество» и назначить выход обратно в исходные столбцы.

df[4:ncol(df)] <- lapply(df[4:ncol(df)], `*`, df$count) 

Или с Map, мы можем сделать то же самое путем умножения соответствующих элементов

df[4:ncol(df)] <- Map(`*`, df[4*ncol(df)], list(df$count)) 

data.table v1.9.7 Используя, мы можем сделать метод lapply на основе (по аналогии с первым base R метода). Преобразуйте «data.frame» в «data.table» (setDT(df)), укажите интересующие столбцы в .SDcols, зациклируйте столбцы, умножьте их на «count» и назначьте (:=) вывод обратно в исходные столбцы.

library(data.table) 
setDT(df)[, (4:ncol(df)) := lapply(.SD, `*`, count), .SDcols = 4:ncol(df)] 
Смежные вопросы