向数据框中添加一列以匹配多列,但长度有差异

问题描述 投票:0回答:1

我的数据框如下所示:

structure(list(type = c("TLAcmeth", "TLAcmeth", "TLAcmeth", "TLAcmeth", 
"TLAcmeth", "TLAcmeth", "TLAcmeth", "TLAcmeth", "TLAmeandaily", 
"TLAmeandaily", "TLAmeandaily", "TLAmeandaily", "TLAmeandaily", 
"TLAmeandaily", "TLAmeandaily", "TLAmeandaily", "aerial", "aerial", 
"aerial", "aerial", "aerial", "aerial", "aerial", "aerial"), 
    season = c("Fall", "Fall", "Spring", "Spring", "Summer", 
    "Summer", "Winter", "Winter", "Fall", "Fall", "Spring", "Spring", 
    "Summer", "Summer", "Winter", "Winter", "Fall", "Fall", "Spring", 
    "Spring", "Summer", "Summer", "Winter", "Winter"), daytype = c("Weekday", 
    "Weekend/Holiday", "Weekday", "Weekend/Holiday", "Weekday", 
    "Weekend/Holiday", "Weekday", "Weekend/Holiday", "Weekday", 
    "Weekend/Holiday", "Weekday", "Weekend/Holiday", "Weekday", 
    "Weekend/Holiday", "Weekday", "Weekend/Holiday", "Weekday", 
    "Weekend/Holiday", "Weekday", "Weekend/Holiday", "Weekday", 
    "Weekend/Holiday", "Weekday", "Weekend/Holiday"), SeasAV = c(2163.40757575758, 
    4545.83194444444, 2832.95277777778, 3763.33055555556, 3341.87121212121, 
    4754.50606060606, 1118.32121212121, 1030.36515151515, 1880.39449388995, 
    3900.1765284028, 2485.72769150217, 2913.10410947887, 2838.91832907833, 
    4194.02223304473, 968.473632205897, 1068.55954517396, 1661.23636363636, 
    2977.9375, 1653.83333333333, 4126.1375, 1912.48939393939, 
    2931.04848484848, 599.771212121212, 680.454545454545)), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -24L), groups = structure(list(
    type = c("TLAcmeth", "TLAcmeth", "TLAcmeth", "TLAcmeth", 
    "TLAmeandaily", "TLAmeandaily", "TLAmeandaily", "TLAmeandaily", 
    "aerial", "aerial", "aerial", "aerial"), season = c("Fall", 
    "Spring", "Summer", "Winter", "Fall", "Spring", "Summer", 
    "Winter", "Fall", "Spring", "Summer", "Winter"), .rows = structure(list(
        1:2, 3:4, 5:6, 7:8, 9:10, 11:12, 13:14, 15:16, 17:18, 
        19:20, 21:22, 23:24), ptype = integer(0), class = c("vctrs_list_of", 
    "vctrs_vctr", "list"))), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -12L), .drop = TRUE))

还有一个看起来像这样的:

structure(list(season = c("Fall", "Fall", "Spring", "Spring", 
"Summer", "Summer", "Winter", "Winter"), daytype = c("Weekday", 
"Weekend/Holiday", "Weekday", "Weekend/Holiday", "Weekday", "Weekend/Holiday", 
"Weekday", "Weekend/Holiday"), n = c(61L, 30L, 65L, 27L, 65L, 
27L, 61L, 29L)), class = c("grouped_df", "tbl_df", "tbl", "data.frame"
), row.names = c(NA, -8L), groups = structure(list(season = c("Fall", 
"Fall", "Spring", "Spring", "Summer", "Summer", "Winter", "Winter"
), daytype = c("Weekday", "Weekend/Holiday", "Weekday", "Weekend/Holiday", 
"Weekday", "Weekend/Holiday", "Weekday", "Weekend/Holiday"), 
    .rows = structure(list(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L), ptype = integer(0), class = c("vctrs_list_of", 
    "vctrs_vctr", "list"))), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -8L), .drop = TRUE))

我想将“n”列加入到第一个数据框,但将其与每个季节/日期类型相匹配。这里的问题是我有三种类型的数据,所以我需要为每种类型的数据声明“n”列三次。有办法做到这一点吗?

r dataframe dplyr cbind
1个回答
0
投票

使用

merge
,然后将列子集化为您想要保留的内容

df3 <- merge(df1, df2, by=c("season","daytype"))

df4 <- df3[,c('col1','col2','col3','col4')]
© www.soinside.com 2019 - 2024. All rights reserved.