r - 在 dpylr 中使用左连接来匹配和填充数据框 R

标签 r dplyr left-join

我有一个问题,无疑会很快得到解决。我有一个主文件,其中包含 5 年期间所有可能的股票代码和经理组合 - 该文件由下面的 mastera 表示。然后我有 20 个单独的文件,代表经理在每只股票中的季度持有量(例如数据框 firsta)。我想修改季度或主数据框,以便如果经理放弃了他们持有的股票,或者经理完全放弃,我将为他们分配一个 0 值,否则使用实际值。这样我将拥有 20 个尺寸一致的文件。

我认为最好的方法是使用 dplyr 的 left_join。我遇到的问题是,如果我使用下面的代码,新数据框 x 仅包含 0。我猜这是因为 firsta 中的数字不会被覆盖。任何帮助将不胜感激。

firsta <- data.frame(APPL = c(612,709,1000, 850, 940), 
            MSFT = c(650,790,100, 80, 910),
            IBM  = c(740,550, 222, 333, 550),
            GOOG = c(0, 1000, 500, 600, 200))

row.names(firsta) <- c("man A", "man B", "man D", "man E", "man f")

注意 C 已经下车了。

mastera <- data.frame(APPL = c(0,0,0,0,0,0), 
            MSFT= c(0,0,0,0,0,0),
            IBM  = c(0,0,0,0,0,0),
            GOOG = c(0,0,0,0,0,0)
            )
row.names(mastera) <- c("man A", "man B", "man C" ,"man D", "man E", "man f")

x <- mastera %>% left_join(first)

编辑 - 预期结果将是这样的。也就是说还有第三行,就是Man C全零。 x 数据框需要是 4 列和 6 行。

    x <- data.frame(APPL = c(612,709,0,1000, 850, 940), 
            MSFT = c(650,790,0,100, 80, 910),
            IBM  = c(740,550,0, 222, 333, 550),
            GOOG = c(0, 1000,0, 500, 600, 200))

最佳答案

我们可以在 base R 中使用 row/column 索引

mastera[row.names(firsta), colnames(firsta)] <- firsta
mastera
#      APPL MSFT IBM GOOG
#man A  612  650 740    0
#man B  709  790 550 1000
#man C    0    0   0    0
#man D 1000  100 222  500
#man E  850   80 333  600
#man f  940  910 550  200

使用tidyverse,我们可以收集成“长”格式,然后进行连接

library(tidyverse)
firsta %>% 
    rownames_to_column('rn') %>%
    gather(key, val, -rn) %>% 
    right_join(mastera %>% 
                 rownames_to_column('rn') %>% 
                 gather(key, val, -rn) %>% 
                 select(-val)) %>% 
    mutate(val = replace(val, is.na(val), 0)) %>%
    spread(key, val)%>% 
    column_to_rownames('rn')
#       APPL GOOG IBM MSFT
#man A  612    0 740  650
#man B  709 1000 550  790
#man C    0    0   0    0
#man D 1000  500 222  100
#man E  850  600 333   80
#man f  940  200 550  910

关于r - 在 dpylr 中使用左连接来匹配和填充数据框 R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50687301/

相关文章:

R:使用相对路径获取文件

sql - SQL查询基于最近的时间戳联接两个表

Mysql子查询比join快多了

php - 左连接位置

r - 如何 'reverse melt' 一个 data.frame?

r - R中数据帧对的距离矩阵

r - 列出序列的所有突变(DNA)

R:在单个因子变量上加宽多个列

r - 从数据框中选择多个顶部组

r - mutate_if - 警告消息