如何用另一个 data.frame 的值替换另一个值?
How to substitute values from one data.frame by values of another one?
我有两个 data.frames - 第一个编码为:
correlations <- data.frame(var1 = c('a','a','a','b','e'), var2 = c('b','c','d','e','c'), r = runif(5,0.5,1))
correlations
var1 var2 r
a b 0.6702400
a c 0.7301086
a d 0.5727880
b e 0.5916388
e c 0.5510549
第二个包含该代码的密钥:
D <- data.frame(code = letters[1:5],name=c('setosa','bulbifer','rubra','minor','nigra'))
D
code name
a setosa
b bulbifer
c rubra
d minor
e nigra
我需要通过第二个 data.frame 中的变量 code
和 name
重新编码第一个数据集 D
。
结果:
var1 var2 r
setosa bulbifer 0.6702400
setosa rubra 0.7301086
setosa minor 0.5727880
bulbifer nigra 0.5916388
nigra rubra 0.5510549
我不知道如何实现这个(我需要一些功能,如合并、替换、映射或其他功能,但没有适合这个的功能)。
用库试试这个 dplyr
library(dplyr)
D <- left_join(correlations, D, by=c("var1" ="code")) %>%
left_join(D, by=c("var2" ="code")) %>% select(name.x, name.y, r) %>%
rename(var1=name.x, var2=name.x)
逻辑是:与 correlations
连接两次,一次是在 var1
上,然后是在 var2
上。然后删除旧的 var1
和 var2
然后重命名新的变量。
或者你可以 merge
两次?在代码 table 中使用 "var1" 而不是 "code" 作为列名称。
correlations <- data.frame(var1 = c('a','a','a','b','e'), var2 = c('b','c','d','e','c'), r = runif(5,0.5,1))
D <- data.frame(var1 = letters[1:5],name=c('setosa','bulbifer','rubra','minor','nigra'))
output1 <- merge(D, correlations, by = "var1", all.y = TRUE)
output1$var1 <- NULL
names(output1)[2] = "var1"
output2 <- merge(D, output1, by = "var1", all.y = TRUE)
> output2
var1 name.x name.y r
1 b bulbifer setosa 0.7328087
2 c rubra setosa 0.9492819
3 c rubra nigra 0.5884522
4 d minor setosa 0.9501921
5 e nigra bulbifer 0.9266531
我有两个 data.frames - 第一个编码为:
correlations <- data.frame(var1 = c('a','a','a','b','e'), var2 = c('b','c','d','e','c'), r = runif(5,0.5,1))
correlations
var1 var2 r
a b 0.6702400
a c 0.7301086
a d 0.5727880
b e 0.5916388
e c 0.5510549
第二个包含该代码的密钥:
D <- data.frame(code = letters[1:5],name=c('setosa','bulbifer','rubra','minor','nigra'))
D
code name
a setosa
b bulbifer
c rubra
d minor
e nigra
我需要通过第二个 data.frame 中的变量 code
和 name
重新编码第一个数据集 D
。
结果:
var1 var2 r
setosa bulbifer 0.6702400
setosa rubra 0.7301086
setosa minor 0.5727880
bulbifer nigra 0.5916388
nigra rubra 0.5510549
我不知道如何实现这个(我需要一些功能,如合并、替换、映射或其他功能,但没有适合这个的功能)。
用库试试这个 dplyr
library(dplyr)
D <- left_join(correlations, D, by=c("var1" ="code")) %>%
left_join(D, by=c("var2" ="code")) %>% select(name.x, name.y, r) %>%
rename(var1=name.x, var2=name.x)
逻辑是:与 correlations
连接两次,一次是在 var1
上,然后是在 var2
上。然后删除旧的 var1
和 var2
然后重命名新的变量。
或者你可以 merge
两次?在代码 table 中使用 "var1" 而不是 "code" 作为列名称。
correlations <- data.frame(var1 = c('a','a','a','b','e'), var2 = c('b','c','d','e','c'), r = runif(5,0.5,1))
D <- data.frame(var1 = letters[1:5],name=c('setosa','bulbifer','rubra','minor','nigra'))
output1 <- merge(D, correlations, by = "var1", all.y = TRUE)
output1$var1 <- NULL
names(output1)[2] = "var1"
output2 <- merge(D, output1, by = "var1", all.y = TRUE)
> output2
var1 name.x name.y r
1 b bulbifer setosa 0.7328087
2 c rubra setosa 0.9492819
3 c rubra nigra 0.5884522
4 d minor setosa 0.9501921
5 e nigra bulbifer 0.9266531