【问题标题】:How do I map (match) columns and rows in a dataframe?如何映射(匹配)数据框中的列和行?
【发布时间】:2020-05-26 07:18:41
【问题描述】:

我已将来自 Coursera 网站的数据解析为列。我有 6 列,它们的长度都不同,但我需要正确映射它们以形成数据框。我不能用来自rowr 包的cbind.fill() 做到这一点。我不能用简单的cbind.data.frame()data.table()(来自data.table 包)来做到这一点。

这是示例代码。

   c1 <- c("one", "two", "three", "four")
   c2 <- c("55k", "98m", 340k")
   c3 <- c("Toronto University", "NYU", "Yale", "Harvard")
   c4 <- c("Beginner", "Intermediate")

   data <- rowr::cbind.fill(c1, c2, c3, c4, fill = NA) # does not match the vars
   data <- cbind.data.frame(c1, c2, c3, c4) # does not match the vars, either
   data <- data.table(c1, c2, c3, c4) # the same situation

我需要像这样收到 df:

   c1    c2    c3                   c4 
  one    55k   Toronto University   Beginner
  two    98m   NYU                  Intermediate
  three  349k  Yale                 NA
  four   NA    Harvard              NA

【问题讨论】:

    标签: r dataframe vector mapping match


    【解决方案1】:

    将向量放入列表中。获取列表和子集的最大长度。

    list_vec <- list(c1, c2, c3, c4)
    as.data.frame(sapply(list_vec, `[`, seq_len(max(lengths(list_vec)))))
    
    #     V1   V2                 V3           V4
    #1   one  55k Toronto University     Beginner
    #2   two  98m                NYU Intermediate
    #3 three 340k               Yale         <NA>
    #4  four <NA>            Harvard         <NA>
    

    【讨论】:

    • 感谢您的回复,但您的代码与变量不匹配
    • 你的意思是列名吗?在这种情况下,您可以在list_vec 中创建一个命名列表。一个简单的方法是list_vec &lt;- dplyr::lst(c1, c2, c3, c4),然后如果你使用上面的方法,它会给你列名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-21
    • 2019-11-23
    • 2022-08-16
    • 2021-07-24
    • 2014-02-07
    • 2022-10-15
    • 1970-01-01
    相关资源
    最近更新 更多