【发布时间】:2014-12-02 16:24:15
【问题描述】:
我有两个数据框。data2$v1 中的行顺序与data1 中的列顺序相对应,但data1$matched 列除外。
data1 <- data.frame(hellore = c(.05, .8, .9 ), internationality = c(1,.03,1), matched = c("hello", "international", "hero"))
data2 <- data.frame(v1 = c("hellore", "internationality"))
我需要一个算法,它在 data1 的每一列中寻找最小值(附加要求是该值必须小于等于 0.05),并将 data1$matched 中的相应字符串分配给 data2$v2。结果应如下所示:
data.final <- data.frame(v1 = c("hellore", "internationality"), v2 = c("hello", "international"))
我试过了,但它不是动态的:
data2$v2 <- NA
values=data1$matched[which(min(data1[,1]) & (data1[,1] <= 0.05))]
data2[1,2] <- paste(values)
values=data1$matched[which(min(data1[,2]) & (data1[,2] <= 0.05))]
data2[2,2] <- paste(values)
有人知道如何解决这个矢量化问题吗?
更新
谢谢!下面的解决方案适用于上面的示例。现在我遇到的问题是,如果 data1 中不存在相应的值,那么行的长度就会不同,我不能再将字符串分配给 data2。查看代码和错误信息:
data1 <- data.frame(hellore = c(.05, .8, .9 ), internationality = c(1,.03,1), matched = c("hello", "international", "hero"))
data2 <- data.frame(v1 = c("hellore", "internationality", "bonbon"))
idx <- unlist(unname(sapply(data1[-3], function(x) if(min(x) <= 0.05) which.min(x))))
data2$v2 <- data1$matched[idx]
$<-.data.frame(*tmp*, "v2", value = c(1L, 3L)) 中的错误:
替换有2行,数据有3
【问题讨论】: