【发布时间】:2015-04-21 04:59:10
【问题描述】:
我尝试了merge 和一系列for/if 循环,其中最好的我将报告。
我阅读了几篇文章,但我找不到任何完全匹配的文章。
我有 2 个数据库,一个是 360 行,另一个是 60 行。 我想将较小的列中存在的一些列添加到较大的一乘四条件下,通过另一个条件重复相同的数字,以便拥有 360 行数据集。
familiarity pb_type sex trial lower upper fit
mate tet m 1 1.760949 3.780915 2.809002
familiar tet m 1 2.020926 3.986183 3.021357
unfamiliar tet m 1 2.570472 4.499613 3.530639
mate stack m 1 3.479230 5.441066 4.500652
familiar stack m 1 2.934518 4.89067 3.904378
“熟悉”、“pb_type”、“性别”和“试用”是我选择行并创建唯一组合的条件。
我想添加其他列“lower”、“upper”和“fit” 到我更大的数据集。根据我更大的数据库中的条件“id”,每一行都必须重复 6 次
我不能使用 rep 左右,因为 2 个数据集中的条件顺序不同(例如,在熟悉度列“mate”中,两者都不是第一位的)
这是我尝试过的: 大数据集是“原始数据”,小数据集是“模拟”
max_count <- length(raw_data[,1])
count = 1
raw_data$lower <- NA
raw_data$upper <- NA
raw_data$mean <- NA
for(i in 1:length(simulation[,1])){
if(count<=max_count)
{
j<-count
while(raw_data[j,3] == simulation[i,3] && raw_data[j,4] == simulation[i,4]&& raw_data[j,7] == simulation[i,2] && raw_data[j,8] == simulation[i,1]){
raw_data$lower[[j]] <- simulation$lower[[i]]
raw_data$upper[[j]] <- simulation$upper[[i]]
raw_data$mean[[j]] <- simulation$fit[[i]]
}
count <-count+1
}
}
不幸的是,它总是在同一点进入无限循环,我认为是因为条件不同的顺序。
不幸的是,我不擅长使用 dplyr 包...这可能是解决方案。
我发现问题又长又复杂,请帮我完善一下!
感谢您的任何意见 万事如意
【问题讨论】:
-
你对
merge的处理是什么? -
news<-merge(x =simulation , y =raw_data , by = c("familiarity","sex" , "trial","pb_type"), all.y=TRUE)
标签: r dataset conditional-statements multiple-databases