在 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)]
我有一个这样的数据框 (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)]