我有一个大型数据框,这让我远离了我的舒适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
答案 0 :(得分:1)
您可以在不传播数据的情况下执行此操作:
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))
答案 1 :(得分:1)
基于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