我有一个很大的数据帧,它让我远离了舒适的工具tidyverse
。我的数据框中有一列,我需要将其他列乘以该列。我将如何用data.table
做到这一点?
例如,我有以下玩具数据:
multiplier a1 a2
1 1 2
2 1 2
3 1 2
和期望的结果
multiplier a1 a2
1 1 2
2 2 4
3 3 6
我dplyr
我会gather
a
然后乘以,然后最后spread
,但我遇到了内存问题。我将如何将muliplier
列乘以data.table
中的每一行
基于David Arenburg的碱基R可以非常快。使用他上面的例子,你可以在不安装任何库的情况下获得相同的输出:
multiplier = 1:3
a1 = c(1, 1, 1)
a2 = c(2, 2, 2)
data <- data.frame(multiplier,a1,a2)
data1<-data
选项 1
data[,2:3] <- data[,2:3] * data[, 1]
选项 2
data1[,2:nrow(data1)] <- data1[,2:nrow(data1)] * data1[, 1]
输出:
data
data1
multiplier a1 a2
1 1 1 2
2 2 2 4
3 3 3 6
您可以在不传播数据的情况下执行此操作:
my_data %>%
mutate_at(c("a1", "a2"), funs(. * multiplier))
# A tibble: 3 x 3
# multiplier a1 a2
# <int> <int> <int>
# 1 1 1 2
# 2 2 2 4
# 3 3 3 6
数据
my_data <- tibble(multiplier = 1:3,
a1 = c(1L, 1L, 1L),
a2 = c(2L, 2L, 2L))