【问题标题】:join data frames row values with columns [duplicate]将数据框行值与列连接[重复]
【发布时间】:2022-01-06 03:23:09
【问题描述】:
ID <- c('1', '2', '3', '4')
Field_Name <- c('Location', 'Status', 'Company', 'Priority')
Field_Value <- c('Arizona', 'New', 'MyCompany', 'Urgent')

df_1<-data.frame(ID, Field_Name, Field_Value)

field_name_v <- as.factor(df_1$Field_Name)

custom_fields_df2 <- data.frame(matrix(ncol =((length(field_name_v))), 
                                   nrow = (nrow(df_1))))
colnames(custom_fields_df2) <- field_name_v
custom_fields_df2$ID <-ID

这似乎是一个奇怪的问题,但对于相当大的数据集来说却是必需的。我知道这可能非常简单,但我无法弄清楚。如果您查看 df_1 它具有 Field_Name 值,该值表示用户添加的自定义字段。在 custom_fields_df2 中,我试图创建一个水平图表,其中 df_1$Field_Name 中的每个唯一值都是一列,并且 Field_Value 在 Field_Name = 列名和 ID 匹配的列下加入。任何帮助将不胜感激。

【问题讨论】:

    标签: r dataframe join


    【解决方案1】:

    看起来你想重塑join有不同的内涵)你的数据框从长格式到宽格式。 tidyverse 的包dplyr 有一个方便的功能。你可以阅读它here 并尝试其他建议的解决方案。

    我来解决你的问题:

    
        library(tidyverse)
        
        df_1 <- data.frame(ID = c('1', '2', '3', '4'), 
                           Field_Name = c('Location', 'Status', 'Company', 'Priority'), 
                           Field_Value = c('Arizona', 'New', 'MyCompany', 'Urgent'))
        
        custom_fields_df2 <- df_1 %>% 
          pivot_wider(names_from = Field_Name, values_from = Field_Value)
    
    

    这会产生:

    
        > custom_fields_df2
        # A tibble: 4 x 5
          ID    Location Status Company   Priority
          <chr> <chr>    <chr>  <chr>     <chr>   
        1 1     Arizona  NA     NA        NA      
        2 2     NA       New    NA        NA      
        3 3     NA       NA     MyCompany NA      
        4 4     NA       NA     NA        Urgent  
    
    

    我不确定您的专栏 ID 到底有什么用途,但对我来说这似乎是多余的,所以我将其删除:

    
        custom_fields_df3 <- df_1 %>% 
          select(-ID) %>% 
          pivot_wider(names_from = Field_Name, values_from = Field_Value)
    
    

    得到:

    
        > custom_fields_df3
        # A tibble: 1 x 4
          Location Status Company   Priority
          <chr>    <chr>  <chr>     <chr>   
        1 Arizona  New    MyCompany Urgent  
    
    

    如果需要,可以使用 as.data.frame() 将 tibble 转换为数据帧。

    【讨论】:

    • 那是完美的。感谢您的帮助。
    • @AndrewR.McPherson 如果答案解决了您的问题,请考虑“接受”它。请参阅here 了解更多信息。
    • 我实际上不得不修改很多,因为我确实需要 ID(和其他一些字段),但是对于我发布的您的解决方案有效,它让我走上了解决方案的轨道。跨度>
    猜你喜欢
    • 2021-08-10
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 2020-01-21
    • 1970-01-01
    • 2020-05-29
    相关资源
    最近更新 更多