在 R 中如何将列的值应用于同一数据框中的多个列

in R how to apply a value of a column to multiple columns in the same data frame

我有一个这样的数据框 (df)

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 以查看哪个是最高的 n

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

top_n的值是前N个有colsum(colname)的列名

我想使用 top_n 的结果用列 count

中的值更新名称为 top_n 的每个列
n   g    count  s_a    s_b    s_c .....
T1 gb    10000   0     10000   0
T1 ga,gb 15000   15000 15000   0

我们可以使用 lapply 遍历感兴趣的列 (4:ncol(df)) ,将其与 'count' 相乘并将输出分配回原始列。

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