我有一个看起来像这样的数据框:
V1 V2 V3
3 4 3
2 4 3
4 4 3
4 4 4
1 4 2
4 2 4
4 4 1
4 4 2
3 4 1
4 4 4
4 4 2
4 4 2
2 1 2
3 2 3
3 4 3
3 4 2
4 4 2
4 4 4
2 3 3
3 4 1
我也有一个类似的查询表:
V_id coeff weight
V1 0.82 4.77
V2 0.75 4.77
V3 0.67 4.77
我想在查找表中使用这些值来使用]在DF1中创建新的计算列>
(V1*coeff+V2*coeff+V3*coeff)/weight
最终数据框应如下所示。
V1 V2 V3 new_column 3 4 3 1.566037736 2 4 3 1.394129979 4 4 3 1.737945493 4 4 4 1.878406709 1 4 2 1.081761006 4 2 4 1.5639413 4 4 1 1.457023061 4 4 2 1.597484277 3 4 1 1.285115304 4 4 4 1.878406709 4 4 2 1.597484277 4 4 2 1.597484277 2 1 2 0.78197065 3 2 3 1.251572327 3 4 3 1.566037736 3 4 2 1.42557652 4 4 2 1.597484277 4 4 4 1.878406709 2 3 3 1.236897275 3 4 1 1.285115304
我必须对具有1125列的数据帧执行此操作。
我有一个数据帧,看起来像这样:V1 V2 V3 3 4 3 2 4 3 4 4 3 4 4 4 1 4 2 4 2 4 4 4 4 1 4 4 2 3 4 1 4 4 4 ...
我们可以将第一个数据转换为长格式,然后按行号进行分组以获取计算出的列
library(dplyr)
library(tidyr)
df1 %>%
mutate(rn = row_number()) %>%
pivot_longer(cols = -rn, names_to = "V_id") %>%
left_join(df2) %>%
group_by(rn) %>%
summarise(new_column = sum(coeff *value)/weight[1]) %>%
select(new_column) %>%
bind_cols(df1, .)
# A tibble: 20 x 4
# V1 V2 V3 new_column
# <int> <int> <int> <dbl>
# 1 3 4 3 1.57
# 2 2 4 3 1.39
# 3 4 4 3 1.74
# 4 4 4 4 1.88
# 5 1 4 2 1.08
# 6 4 2 4 1.56
# 7 4 4 1 1.46
# 8 4 4 2 1.60
# 9 3 4 1 1.29
#10 4 4 4 1.88
#11 4 4 2 1.60
#12 4 4 2 1.60
#13 2 1 2 0.782
#14 3 2 3 1.25
#15 3 4 3 1.57
#16 3 4 2 1.43
#17 4 4 2 1.60
#18 4 4 4 1.88
#19 2 3 3 1.24
#20 3 4 1 1.29
Edit