R 从其他数据帧填充数据帧

R 从其他数据帧填充数据帧,r,data.table,R,Data.table,我希望从data1中随机抽取列'V1'到'V4',并使用它填充data2 我想按'Group1'和'Group2'取样,并为每个组组合进行n次重复,其中n在数据2中定义为'Size' 所需输出应有900+768+651+102=2421行。我希望使用替换进行采样。基于前面的问题/答案,我们可以将以“V”开头的列名(“nm1”)与“Group1”、“Group2”上的第一个数据集进行连接,然后使用替换=TRUE获取样本,并使用该索引填充采样列的值 data1=data.frame("Group1"

我希望从
data1
中随机抽取列
'V1'
'V4'
,并使用它填充
data2

我想按
'Group1'
'Group2'
取样,并为每个组组合进行n次重复,其中n在
数据2中定义为
'Size'


所需输出应有900+768+651+102=2421行。我希望使用替换进行采样。

基于前面的问题/答案,我们可以将以“V”开头的列名(“nm1”)与“Group1”、“Group2”上的第一个数据集
进行连接,然后使用
替换=TRUE
获取
样本
,并使用该索引填充采样列的值

data1=data.frame("Group1" = sample(1:2,100,r=T),
                  "Group2" = sample(c('a','b'),100,r=T),
                  "V1" = sample(1:3, 100, r=T),
                  "V2" = sample(0:1, 100, r=T),
                  "V3" = sample(1:5, 100, r=T),
                  "V4" = sample(1:2, 100, r=T))


data2=data.frame("Group1"=c(1,1,2,2),
                  "Group2"=c('a','b','a','b'),
                  "Size"=c(900,768,651,102))
库(data.table)

nm1当你说示例列时,你是否期望更少的列数如此之多!我尝试了这个方法,当我应用到我自己的数据时,它只输出“V4”的采样,我得到了这样的结果:vecseq中的错误(f_uuuu,len_uuu,if(allow.cartesian | | | notjoin | | |)!anyDuplicated(f_uu,:Join结果在15000000行中;超过1000090=nrow(x)+nrow(I).检查i中是否存在重复的键值,每个键值都会一次又一次地加入x中的同一个组。如果没有问题,请尝试by=.EACHI为每个组运行j以避免较大的分配。如果确实要继续,请使用allow.cartesian=TRUE重新运行。否则,请在常见问题解答、Wiki、堆栈溢出和data.table中搜索此错误消息issue tracker以获取建议。您是否可以进行简短的聊天,以便我可以共享详细信息?@bvowe抱歉,我当时处于脱机状态。您的错误似乎是因为与示例相比,
data2
在原始数据集中可能有重复的记录。如果是这种情况,则通过在
join上执行
,它无法明确指向uniquElocation@bvowe一种方法是按“Group1”、“Group2”分组,然后创建一个“Size”字符串或一个“Size”列表列,然后doo合并,最后取消大小设置
library(data.table)
nm1 <- grep("^V\\d+", names(data1), value = TRUE)
setDT(data2)[data1, on = .(Group1, Group2)][,
   .(i_samp = sample(.I, Size, replace = TRUE)), by = .(Group1, Group2, Size)
         ][, (nm1) :=   data1[i_samp, nm1], .(Group1, Group2)][]