我有以下2个数据框 -
第一个数据框如下所示:
id <- c(1,2,3,4)
a <- c(1,1,0,1)
b <- as.character(c(0,1,1,1))
c <- as.character(c(0,1,1,0))
d <- c(0,1,1,0)
dt <- data.frame(id,a,b,c,d, stringsAsFactors = FALSE)
> dt
id a b c d
1 1 1 0 0 0
2 2 1 1 1 1
3 3 0 1 1 1
4 4 1 1 0 0
第二个数据框如下所示:
id <- c(1,2,2,2,2,3,3,3,4,4)
col <- c("a","a","b","c","d","b","c","d","a","b")
val <- as.character(c("t1","x1","x2","x3","x4","y2","y3","y4","z1","z2"))
values <- data.frame(id,col,val, stringsAsFactors = FALSE)
> values
id col val
1 1 a t1
2 2 a x1
3 2 b x2
4 2 c x3
5 2 d x4
6 3 b y2
7 3 c y3
8 3 d y4
9 4 a z1
10 4 b z2
我正在尝试映射第二个数据帧中col列的值,以替换数据帧1中的1。
请查看以下所需的输出:
> output
id a b c d
1: 1 t1 0 0 0
2: 2 x1 x2 x3 x4
3: 3 0 y2 y3 y4
4: 4 z1 z2 0 0
我的尝试:
我知道这可以通过直接转播值数据帧来实现,但我面临长期向量问题。 Intead我使用sparseMatrix()
获取数据帧1,然后我可以映射数据帧1中的原始值。
注意 - 我有一个非常大的数据,我不能使用data.table::dcast.data.table()
建议和帮助将不胜感激。