将数据框行值与列连接起来

join data frames row values with columns

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 匹配。任何帮助将不胜感激。

您似乎想要 reshapejoin 具有不同的含义)您的数据框从长格式到宽格式。来自 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 转换为数据帧