我有像这样的数据框(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的结果来更新name = to top_n的每列,其中列数为
n g count s_a s_b s_c .....
T1 gb 10000 0 10000 0
T1 ga,gb 15000 15000 15000 0
答案 0 :(得分: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',并赋值({{ 1}})输出回原始列。
:=