R 从2个不同的数据帧中划分2列
当有多个列要从中标识时,有人知道如何从两个不同的数据帧中划分两列吗 例如:R 从2个不同的数据帧中划分2列,r,dplyr,R,Dplyr,当有多个列要从中标识时,有人知道如何从两个不同的数据帧中划分两列吗 例如: 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(m
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
有人知道如何创建一个新的数据帧,将df2中的“value”列除以df1的value列吗?当有比当前示例中更多的列时,也可以使用该方法。将两个数据帧连接在一起,然后执行除法并删除由连接生成的不需要的列(假设您希望计算的
值
列替换原始数据帧中的值
列)。根据需要,您可能需要不同的*\u联接
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
将两个数据帧连接在一起,然后执行除法并删除由连接生成的不需要的列(假设您希望计算的
值列替换原始数据帧中的值列)。根据需要,您可能需要不同的*\u连接
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
在base 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
df3在base 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
df3我们还可以使用data.table
进行联接,并通过将“value”列除以其他数据集中的相应列来创建列“value”,同时在
上联接“name”和“month”
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
库(data.table)
df3我们还可以使用data.table
进行连接,并通过将“value”列除以其他数据集中的相应列来创建列“value”,同时在
上连接“name”和“month”
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
库(data.table)
df3所以,df2$value/df1$value
?或者如果您想要一个data.frame
作为输出:df2[“value”]/df1[“value”]
两个数据帧必须具有相同的列数。检查?合并-这基本上是一个连接,或者使用tidyverse的连接…new.dfdf3@RonakShah:抱歉,忽略我的最新问题。我有点困惑。无论如何感谢您的帮助!所以,df2$value/df1$value
?或者如果您想要一个数据.frame
作为输出:df2[“value”]/df1[“value”]
两个数据帧必须具有相同的列数。检查?合并-这基本上是一个连接,或者使用tidyverse…new中的连接。dfdf3@RonakShah:抱歉,忽略我的最新问题。我有点困惑。无论如何,感谢您的帮助!