【问题标题】:Encoding of a column from another column when a specific value is observed r当观察到特定值时从另一列编码一列
【发布时间】:2021-03-25 12:18:39
【问题描述】:

下面给出了一个示例数据框和一个包含要编码的列信息的列表。

# Dataframe

DF <- data.frame("genres" = c("pop", "pop","jazz","rock","jazz","blues","rock","pop","blues","pop"),
           "colors" = c("orange","red","red","orange","green","blue","orange","red","blue","green"),
           "values" = c(12, 15, 24, 33 ,47, 2 , 9 ,6, 89, 75),
           "genres number 12" = c("r","r","?","l","?","r","l","r","r","r"),
           "genres number 17" = c("l","l","?","r","?","l","r","l","l","l"),
           "colors number 3" = c("r","l","l","r","?","r","r","l","r","?"),
           "colors number 10" = c("r","l","l","r","l","r","r","l","r","l"),
           check.names = FALSE
           )

# Encoding list

EncodingList <- list("genres number 17", "colors number 3")
names(EncodingList) <- c("colors number 3", "genres number 12")

当观察到特定值时,我想对另一列中的一列进行编码。例如EncodingList 中的第一个元素是"colors number 3",其对应的名称是"genres number 17"。当DF"genres number 17" 列中的值为? 时,我们应该用"colors number 3" 具有的任何对应值(“r”、“l”或“?”)填充该行。预期输出如下所示。 EncodingList很长,最好用循环遍历。

  expectedDF <- data.frame("genres" = c("pop", "pop","jazz","rock","jazz","blues","rock","pop","blues","pop"),
           "colors" = c("orange","red","red","orange","green","blue","orange","red","blue","green"),
           "values" = c(12, 15, 24, 33 ,47, 2 , 9 ,6, 89, 75),
           "genres number 12" = c("r","r","?","l","?","r","l","r","r","r"),
           "genres number 17" = c("l","l","l","r","?","l","r","l","l","l"),
           "colors number 3" = c("r","l","l","r","?","r","r","l","r","r"),
           "colors number 10" = c("r","l","l","r","l","r","r","l","r","l"),
           check.names = FALSE
           )

【问题讨论】:

    标签: r list dataframe


    【解决方案1】:

    您可以尝试使用 for 循环来更新 EncodingList 中具有 ? 的列,并使用另一个给定列的值。

    for(i in seq_len(length(EncodingList))) {
        j <- which(DF[,EncodingList[[i]]] == "?")
        DF[j,EncodingList[[i]]] <- DF[j,names(EncodingList)[i]]
    }
    identical(DF, expectedDF)
    #[1] TRUE
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多