【发布时间】:2021-01-20 19:59:05
【问题描述】:
我一直在尝试循环左连接(使用 R)。我需要创建一个表,其中的列代表更大表中的样本。新表的每一列都应代表这些样本中的每一个。
library(tidyr)
largetable <- data.frame(PlotCode=c(rep("Plot1",20),rep("Plot2",20)),
Category=c(rep("A",8),rep("B",8),rep("C",4),rep("A",12),rep("B",4),rep("C",4)))
a <- data.frame(PlotCode=c("Plot1","Plot1","Plot2","Plot2"),
Category=c("A","B","A","B"))
##example of code to loop over 100 left joins derived from samples of two elements from a large table. It fails to create the columns.
for (i in 1:100){
count <- largetable %>% group_by(PlotCode) %>% sample_n(2, replace = TRUE)%>%
count(PlotCode,Category)
colnames(count)[3] <- paste0("n",i)
b <- left_join(a, count, by = c("PlotCode","Category"))
}
##example of desired output table. Columns n1 to n100 should change depending of samples.
b <- data.frame(PlotCode=c("Plot1","Plot1","Plot2","Plot2"),
Category=c("A","B","A","B"),
n1=c(2,1,0,1),
n2=c(1,1,1,1),
n3=c(2,0,1,2))
如何循环左连接,使每一列对应一个不同的样本?
【问题讨论】:
-
您能否分享一个
largetable的小示例(类似于a)并展示您希望预期输出的外观? -
谢谢罗纳克。我已经修改了脚本以显示“largetable”的示例和预期的输出表“b”。输出表中的 n1 到 n100 列应根据“大表”中的每次采样而变化
-
通过编辑而不是 cmets 进行澄清。该代码与您的问题有什么关系? “任何想法”在这里不是一个有效的问题。 How to Ask
-
请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入作为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出尽可能少的代码,即您显示的代码可以通过您显示的代码扩展为不正常的代码。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)的 SQL,并以表格式作为代码输入。 How to Ask 暂停总体目标的工作,将代码砍到第一个表达式,没有给出你期望的内容,说出你的期望和原因。
标签: r loops join left-join subsampling