我有这样的桌子
Timeline1 Timeline2 Timeline3
v3 v7 v11
v4 v1 v12
v6 v8 v13
v2 v9 v17
v5 v10 v16
df1<- structure(list(Timeline1 = structure(c(2L, 3L, 5L, 1L, 4L), .Label = c("v2",
"v3", "v4", "v5", "v6"), class = "factor"), Timeline2 = structure(c(3L,
1L, 4L, 5L, 2L), .Label = c("v1", "v10", "v7", "v8", "v9"), class = "factor"),
Timeline3 = structure(c(1L, 2L, 3L, 5L, 4L), .Label = c("v11",
"v12", "v13", "v16", "v17"), class = "factor")), .Names = c("Timeline1",
"Timeline2", "Timeline3"), class = "data.frame", row.names = c(NA,
-5L))
我有一张清单表
Name Meaning
v1 C
v2 D
v3 R
v4 T
v5 Y
v6 W
v7 Q
v8 A
v9 Z
v10 X
v11 V
v12 B
v13 N
v14 J
v15 L
v16 O
v17 P
V18 U
V19 F
数据框可以在下面找到
df2 <- structure(list(Name = structure(c(1L, 12L, 13L, 14L, 15L, 16L,
17L, 18L, 19L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L), .Label = c("v1",
"v10", "v11", "v12", "v13", "v14", "v15", "v16", "v17", "V18",
"V19", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "v9"), class = "factor"),
Meaning = structure(c(3L, 4L, 12L, 13L, 18L, 16L, 11L, 1L,
19L, 17L, 15L, 2L, 8L, 6L, 7L, 9L, 10L, 14L, 5L), .Label = c("A",
"B", "C", "D", "F", "J", "L", "N", "O", "P", "Q", "R", "T",
"U", "V", "W", "X", "Y", "Z"), class = "factor")), .Names = c("Name",
"Meaning"), class = "data.frame", row.names = c(NA, -19L))
我想使用清单中显示的值替换第一个表,最终输出可能会像这样
Timeline1 Timeline2 Timeline3
R Q V
T C B
W A N
D Z P
Y X O
我们可以使用match
。将第一个数据集转换为,matrix
并match
使用'df2'的'Name'列将其转换为数字索引,并在此基础上获得相应的'Meaning'元素并将输出分配给'df1'
df1[] <- df2$Meaning[match(as.matrix(df1), df2$Name)]
df1
# Timeline1 Timeline2 Timeline3
#1 R Q V
#2 T C B
#3 W A N
#4 D Z P
#5 Y X O
或者我们可以使用mutate_each
从dplyr
我们match
每个“名称”列,并与相应的“意义”元素替换它。
library(dplyr)
df1 %>%
mutate_each(funs(df2$Meaning[match(., df2$Name)]))
# Timeline1 Timeline2 Timeline3
#1 R Q V
#2 T C B
#3 W A N
#4 D Z P
#5 Y X O
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句