【问题标题】:Allocate values in respective variables在各个变量中分配值
【发布时间】:2022-08-19 10:26:42
【问题描述】:

每一行都错误地分配在其各自的列中。有没有办法正确排序,如果没有价值,则包括 NA。提前致谢

df <- data.frame(
  price = c(\"1€\", \"1€\", \"2022-03-04\", \"4hr\", \"Iberia\"),
  duration = c(\"2€\", \"1hr\", \"2022-01-02\", \"4hr\", \"Eurostart\"),
  airline = c(\"3€\", \"1hr\", \"2022-01-03\", \"5min\", \"ITA\"),
  dates = c(\"4€\", \"1hr 5min\", \"2022-01-03\", \"Air france\", \"Lufthansa\")
)


desired_output <- data.frame(
  price = c(\"1€\", \"1€\", \"2€\", \"3€\", \"4€\", \"NA\"),
  duration = c(\"1hr\", \"1hr\", \"1hr 5min\", \"4hr\", \"4hr\", \"5min\"),
  airline = c(\"Air france\", \"Iberia\", \"Eurostart\", \"ITA\", \"Lufthansa\", \"NA\"),
  dates = c(\"2022-03-04\", \"2022-01-02\", \"2022-01-03\", \"2022-01-03\", \"NA\", \"NA\")
)
  • 乍一看,清理杂乱的数据需要或多或少的手动工作。恕我直言,问题是在读取数据时出现了严重错误。因此,我建议重新开始并弄清楚如何以更整洁的格式读取数据,而不是事后尝试清理它。
  • 您是否认为@stefan 我可以创建额外的变量,这些变量用于每个变量并采用一些模式。例如,在变量 price_x 中,只有带有欧元可以存储。在变量duration 中,只有行小时或者分钟可以存储等等?

标签: r data-cleaning


【解决方案1】:

就我个人而言,我会回到开始并尝试弄清楚为什么以混乱的格式读取数据。就目前而言,这是清理数据的一种选择:

df <- data.frame(
  price = c("1€", "1€", "2022-03-04", "4hr", "Iberia"),
  duration = c("2€", "1hr", "2022-01-02", "4hr", "Eurostart"),
  airline = c("3€", "1hr", "2022-01-03", "5min", "ITA"),
  dates = c("4€", "1hr 5min", "2022-01-03", "Air france", "Lufthansa")
)

df_mat <- as.matrix(df)

is_pattern <- list(
  price = grepl("\\€$", df_mat),
  duration = grepl("(hr|min)", df_mat),
  date = grepl("^\\d{4}-\\d{2}-\\d{2}$", df_mat)
)
is_pattern$airline <- !is_pattern$price  & !is_pattern$duration & !is_pattern$date

vec_list <- lapply(is_pattern, function(x) df_mat[x])

max_len <- max(lengths(vec_list))

vec_list <- lapply(vec_list, function(x) c(x, rep(NA, max_len - length(x))))

as.data.frame(vec_list)
#>   price duration       date    airline
#> 1    1€      4hr 2022-03-04     Iberia
#> 2    1€      1hr 2022-01-02  Eurostart
#> 3    2€      4hr 2022-01-03        ITA
#> 4    3€      1hr 2022-01-03 Air france
#> 5    4€     5min       <NA>  Lufthansa
#> 6  <NA> 1hr 5min       <NA>       <NA>

【讨论】:

    猜你喜欢
    • 2019-05-17
    • 1970-01-01
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    相关资源
    最近更新 更多