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

时间:2016-09-29 02:16:01

标签: r dataframe apply

我有像这样的数据框(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

1 个答案:

答案 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}})输出回原始列。

:=