如何在R中的相同参数字段下填充一个数据帧(df1)的行中存在的参数值到数据帧(df2)

R新手,请指导!

Dataframe1包含:

df1
    Col1  Col2  Col3  Col4  Col5 
    A=5   C=1   E=5  F=4  G=2  --Row1 
    A=6   B=3   D=6  E=4  F=4  --Row2 
    B=2   C=3   D=3  E=3  F=7  --Row3

Dataframe2包含一行,每个参数作为字段名称:
df2 = A B C D E F g …..’n’

示例输出(如果未找到值,则打印空值):

df2:
A  B  C  D   E   F   G
5     1      5   4   2
6  3     6   4   4
   2  3  3   3   7

如何在第一行中作为字段存在的相同参数下将每个参数的值从df1填充到df2?

创建一个行号列(rownames_to_column),收集成’long’格式,将’val’列分成两列(通过拆分= – 自动拾取)然后扩展为’wide’格式.默认情况下,缺少的元素由NA填充.还有一个填充参数可将其更改为所需的填充值

library(tidyverse)
res <- df1 %>%
        rownames_to_column('rn') %>%
        gather(key, val, -rn) %>% 
        separate(val, into = c('val1', 'val2')) %>%
        select(-key) %>%
        spread(val1, val2) %>%
        select(-rn)
res
#     A    B    C    D E F    G
#1    5 <NA>    1 <NA> 5 4    2
#2    6    3 <NA>    6 4 4 <NA>
#3 <NA>    2    3    3 3 7 <NA>

如果存在包含某些值的第二个数据集,并且想要替换’df2’中的非NA元素

df2[!is.na(df2)] <-  res[!is.na(df2)][names(df2)]

或者另一个选项是data.table中的dcast

library(data.table)
dcast(setDT(df1)[, tstrsplit(unlist(.SD), "="), .(grp = 1:nrow(df1))
               ], grp ~ V1, value.var = 'V2')[, grp := NULL][]
#    A  B  C  D E F  G
#1:  5 NA  1 NA 5 4  2
#2:  6  3 NA  6 4 4 NA
#3: NA  2  3  3 3 7 NA

数据

df1 <- structure(list(Col1 = c("A=5", "A=6", "B=2"), Col2 = c("C=1", 
"B=3", "C=3"), Col3 = c("E=5", "D=6", "D=3"), Col4 = c("F=4", 
"E=4", "E=3"), Col5 = c("G=2", "F=4", "F=7")), .Names = c("Col1", 
"Col2", "Col3", "Col4", "Col5"), class = "data.frame", row.names = c(NA, 
-3L))
https://stackoverflow.com/questions/49377966/how-to-populate-parameters-values-present-in-rows-of-one-dataframedf1-to-dataf

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:如何在R中的相同参数字段下填充一个数据帧(df1)的行中存在的参数值到数据帧(df2)