有人从id的多个列开始,有人知道如何从两个不同的数据帧中划分两个列吗?
示例:
library(dplyr)
name <- c('A','A',
'B','B')
month = c("oct 2018", "nov 2018",
"oct 2018", "nov 2018")
var1 = c("99", "99",
"99", "99")
value <- seq(1:length(month))
df1 = data.frame(name, month, var1, value)
df2 = df1
df2["var1"] = c("992", "992", "992", "992")
df2["value"] = c(2, 4, 6, 8)
df1
df2
输出
> df1
name month var1 value
1 A oct 2018 99 1
2 A nov 2018 99 2
3 B oct 2018 99 3
4 B nov 2018 99 4
> df2
name month var1 value
1 A oct 2018 992 2
2 A nov 2018 992 4
3 B oct 2018 992 6
4 B nov 2018 992 8
有人知道如何创建一个新的数据框,该数据框将df2中的“值”列除以df1的值列吗?当列数比当前示例多时,该方法也应该可以使用。
答案 0 :(得分:1)
将两个数据帧连接在一起,然后执行除法并删除由连接生成的不需要的列(假设您要计算的value
列替换原始数据帧中的value
列) 。根据您的需要,您可能需要一个不同的*_join
。
library(dplyr)
df1 %>%
inner_join(df2, by = c("name", "month")) %>%
mutate(value = value.x / value.y) %>%
select(-value.x, -value.y)
给予:
name month var1.x var1.y value
1 A oct 2018 99 992 0.5
2 A nov 2018 99 992 0.5
3 B oct 2018 99 992 0.5
4 B nov 2018 99 992 0.5
答案 1 :(得分:1)
在基数R中,我们可以做merge
df3 <- merge(df1, df2, by = c("name", "month"))
df3$value <- df3$value.x/df3$value.y
df3
# name month var1.x value.x var1.y value.y value
#1 A nov 2018 99 2 992 4 0.5
#2 A oct 2018 99 1 992 2 0.5
#3 B nov 2018 99 4 992 8 0.5
#4 B oct 2018 99 3 992 6 0.5
如果不需要value.x
和value.y
列,则可以删除它们。
答案 2 :(得分:0)
我们也可以使用data.table
进行联接,并通过将'value'列除以另一个数据集中的相应列来创建列'value',同时联接on
'name'和“月”
library(data.table)
df3 <- copy(df1)
setDT(df3)[df2, value := value/i.value, on = .(name, month)]
df3
# name month var1 value
#1: A oct 2018 99 0.5
#2: A nov 2018 99 0.5
#3: B oct 2018 99 0.5
#4: B nov 2018 99 0.5