创建一个空的数据框并将行附加到R中

时间:2019-12-10 20:59:10

标签: r dataframe tibble

我有一个数据框,我想从中提取一些满足条件的行。我已经能够成功获取这些行的索引,但是当我尝试将这些行追加到我创建的空数据框时,我会遇到各种各样的错误(甚至更有趣,只有一个空数据框,没有错误)。

datosA <- read_excel(archivo, col_names = TRUE, sheet = "Sheet1")
datosB <- read_excel(archivo, col_names = TRUE, sheet = "Sheet1")

AvsB <- data.frame()

for (x in datosA$'m/z') {
  if (!(x %in% datosB$'m/z')) {
    index <- match(x, datosA$'m/z')
    rbind(AvsB, datosA[index,])
  }
}

不幸的是,这没有任何作用 我将衷心感谢您的帮助。 谢谢!

head(datosA)
# A tibble: 6 x 16
    Row Index `Peak Name`      `m/z` `Ret. Time`  `HC 1`  `HC 2` `QC 1` `FM 1`  `HC 3` `QC 2` `FM 2` `QC 3` `FM 3` `QC 4` `FM 4`
  <dbl> <dbl> <chr>            <dbl>       <dbl>   <dbl>   <dbl>  <dbl>  <dbl>   <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
1     1     1 288.3/7.8 (80)    288.        7.82  82639  133150. 115280  32179  45842  116433  37358 138583  32425 217890  37055
2     2     2 288.3/8.0 (82)    288.        7.96  85895. 140309  119273  15051  63766  132999  12131 146485  13557 245226  14266
3     3     3 301.1/1.3 (92)    301.        1.28 141133. 161141. 180196  22494 168913  185736  26525 172954  29359 156029  25718
4     4     4 313.3/15.7 (99)   313.       15.7   92327. 116870   90781    816  84477. 126151    801 126316    971 186423    990
5     5     5 316.3/11.9 (104)  316.       11.9   12232.   8196.  10279    660  15646   15529    679  20439    657  17514    576
6     6     6 316.3/8.5 (105)   316.        8.47  98679  111867. 105794  62869  74714. 111100  77540 153424  80128 159846  76565

1 个答案:

答案 0 :(得分:1)

您需要在每个循环中将rbind的结果存储回AvsB:

SELECT
gc.IDGastosComunes,
v.IDPropiedad,
v.Depto,
v.NombreDueno,
(SELECT u2.IDCategoria
    FROM usuarios_tipos u2
    WHERE u2.IDUsuario = v.IDDueno AND
                u2.IDTipo = 10) AS gc.IDCategoria, <-- This return an int -> 1, 2 or 3
    CASE
        WHEN IDCategoria = 1 THEN 'Convenio'
        WHEN IDCategoria = 2 THEN 'Plus'
        WHEN IDCategoria = 3 THEN 'Preferente'
        WHEN IDCategoria = 4 THEN 'Premium'
        WHEN IDCategoria = 5 THEN 'La Serena'
        ELSE ''
END AS Categoria, <-- This has to show the string
gc.monto,
gc.FechaEmisionPago AS Periodo
FROM
gastos_comunes gc
JOIN vcartera_propiedades v ON (v.IDPropiedad=gc.IDPropiedad)
WHERE v.IDGrupo = 1