我已经为这个问题苦苦挣扎了一个星期,但我无法为这个问题形成逻辑:
我有以下这种迁移表(或数据透视表):
Region County1 County2 County 3... County 75 Multiplier
County1 0.23 0.56 0.54 ... 0.75 1200
County2 0.54 0.33 0.66 ... 0.66 1321
...
County75 0.92 0.21 0.12 ... 0.45 1600
我想将乘数的第一行元素乘以第一县列(例如:1200 *(County1))
我正在尝试自动化这样的事情:
Table1$County1 <- Table1$Multiplier[1] * Table1$County1
我一直试图考虑使用循环/函数,dplyr等,但是我无法提出有效的代码/我的逻辑存在严重缺陷。欢迎任何帮助/建议,我一直在搜索Stack Overflow,但我不知道要搜索的内容(或该操作的名称)。如果已经存在类似的解决方案,并且我确实无法找到它,我并不是要引起任何重复:(。
(在excel中,这类似于将$(美元符号)与列名相乘并相乘)
输出应如下所示:
Region County1 County2 ... County 75 Multiplier
County1 276 739.76 ... 1200 1200
County2 648 435.93 ... 1056 1321
...
County75 1104 277.41... 720 1600
谢谢!
答案 0 :(得分:3)
这是一个tidyverse
解决方案:
library(tidyverse)
df1 <- select(df,Region1 = Region,Multiplier)
df2 <- select(df,-Multiplier) %>% gather(Region1,value,-Region)
inner_join(df1,df2,by="Region1") %>%
mutate(value = Multiplier * value) %>%
select(-Multiplier) %>%
spread(Region1,value)
# Region County1 County2 County75
# 1 County1 276 739.76 1200
# 2 County2 648 435.93 1056
# 3 County75 1104 277.41 720
数据
df <- read.table(text="Region County1 County2 County75 Multiplier
County1 0.23 0.56 0.75 1200
County2 0.54 0.33 0.66 1321
County75 0.92 0.21 0.45 1600",strin=F,h=T)
答案 1 :(得分:2)
这将跨*
的元素和df[, 6]
的列映射函数df[, -c(1, 6)]
,即将第一“ County”列乘以第六列的第一个值,第二个“ County”乘以”,再按第六列的第二个值,依此类推。
df[, -c(1, 6)] <- Map(`*`, df[, -c(1, 6)], df[, 6])
地图输入数据:
df <- data.table::fread("
Region County1 County2 County County75 Multiplier
County1 0.23 0.56 0.54 0.75 1200
County2 0.54 0.33 0.66 0.66 1321
County2 0.44 0.26 0.46 0.85 1472
County75 0.92 0.21 0.12 0.45 1600
", data.table = F)
地图输出数据
# Region County1 County2 County County75 Multiplier
# 1 County1 276 739.76 794.88 1200 1200
# 2 County2 648 435.93 971.52 1056 1321
# 3 County2 528 343.46 677.12 1360 1472
# 4 County75 1104 277.41 176.64 720 1600