【问题标题】:R: Assign string to data frame based on numerical valueR:根据数值将字符串分配给数据框
【发布时间】: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]

$&lt;-.data.frame(*tmp*, "v2", value = c(1L, 3L)) 中的错误:
替换有2行,数据有3

【问题讨论】:

    标签: r match assign


    【解决方案1】:

    您可以尝试以下方法(但是,它不是矢量化的,因为它使用sapply):

    idx <- unlist(unname(sapply(data1[-3], function(x) if(min(x) <= 0.05) which.min(x))))
    data2$v2 <- data1$matched[idx]
    

    编辑

    对于更新后的示例,您可以使用以下调整后的代码:

    idx <- unlist(unname(sapply(data1[-3], function(x) if(min(x) <= 0.05) which.min(x))))
    data2$v2 <- c(as.character(data1$matched[idx]), rep(NA, nrow(data2) - length(idx)))
    

    【讨论】:

    • 谢谢!但是,如何将字符串分配给数据框(如 data2),其中的行没有来自 data1 的相应字符串?然后 idx 和 data2 的长度不相等。然后解决方案不再起作用。
    • @OAM,我的回答是基于你的例子。如果您想以不同的方式添加它,请使用相应的示例更新您的问题。应该如何完成取决于您要如何添加数据。
    猜你喜欢
    • 2021-07-12
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    相关资源
    最近更新 更多