【问题标题】:add matching column from one csv file to another and multiply between columns将匹配列从一个 csv 文件添加到另一个文件并在列之间相乘
【发布时间】:2015-04-16 04:22:42
【问题描述】:

我有两个单独的 csv 文件 1. 15列2500行 2. 3 列和 150 行。 这两个表都有一个共同的列名。我想将 csv 文件 1 的列添加到 csv 2,但仅根据常见的列名和值匹配记录,然后将 csv 1 文件的每一列与 csv 2 列相乘并编写一个单独的 csv 文件。数据和结果如下:

CSV 1:

Wavelength     Spec1      Spec2     Spec3     Spec4

461            0.031162   0.02928   0.025156  0.028369
462            0.031452   0.028441  0.024456  0.028587
463            0.03145    0.02857   0.024519  0.028295
464            0.031333   0.029298  0.025012  0.02806
465            0.031426   0.02948   0.024909  0.02872
466            0.031602   0.029342  0.025329  0.028861
467            0.031521   0.029108  0.025481  0.028738
468            0.031123   0.029013  0.024849  0.028731
469            0.031609   0.029285  0.025036  0.028567
470            0.031695   0.029543  0.025357  0.028627
471            0.031134   0.029535  0.025374  0.028931
472            0.031587   0.029106  0.02503   0.028847

CSV 2:

Wavelength   SpecR    Stdv
462          0.883542 0.010013
463          0.877453 0.011648
464          0.881011 0.011571
465          0.874721 0.009472
466          0.879688 0.006468
467          0.886569 0.004118
468          0.891913 0.003214
469          0.88768  0.002561

输出 1

Wavelength  SpecR    Stdv     Spec1    Spec2    Spec3    Spec4
462         0.883542 0.010013 0.031452 0.028441 0.024456 0.028587
463         0.877453 0.011648 0.03145  0.02857  0.024519 0.028295
464         0.881011 0.011571 0.031333 0.029298 0.025012 0.02806
465         0.874721 0.009472 0.031426 0.02948  0.024909 0.02872
466         0.879688 0.006468 0.031602 0.029342 0.025329 0.028861
467         0.886569 0.004118 0.031521 0.029108 0.025481 0.028738
468         0.891913 0.003214 0.031123 0.029013 0.024849 0.028731
469         0.88768  0.002561 0.031609 0.029285 0.025036 0.028567

输出 2:

Wavelength SpecR    Spec1    Spec2    Spec3    Spec4
462        0.883542 0.02779  0.025129 0.021608 0.025258
463        0.877453 0.027596 0.025069 0.021515 0.024828
464        0.881011 0.027605 0.025812 0.022036 0.024721
465        0.874721 0.027489 0.025787 0.021788 0.025122
466        0.879688 0.0278   0.025811 0.022282 0.025388
467        0.886569 0.027946 0.025806 0.022591 0.025478
468        0.891913 0.027759 0.025877 0.022163 0.025625
469        0.88768  0.028058 0.025995 0.022224 0.025358

我可以合并 csv 表,但我不知道如何附加我需要的数据。谢谢

csv1 <- read.table('spectral1.csv', header=TRUE,sep=',')
csv2 <- read.table('spectral2.csv', header=TRUE,sep=',')

【问题讨论】:

  • then multiply each column of csv 1 file with csv 2 column and write a separate csv file”是什么意思?
  • @Juvin 请查看评论和答案,让我们知道我们还能如何帮助您。

标签: r


【解决方案1】:

要将您的 csv1 数据框加入到 csv2 中,您可以使用 output1 中的方式,您可以使用 merge() ... 了解更多关于连接 in this answer 的信息。

output1 <- merge(csv2, csv1, by = "Wavelength", all.x = TRUE) 

#   Wavelength    SpecR     Stdv    Spec1    Spec2    Spec3    Spec4
# 1        462 0.883542 0.010013 0.031452 0.028441 0.024456 0.028587
# 2        463 0.877453 0.011648 0.031450 0.028570 0.024519 0.028295
# 3        464 0.881011 0.011571 0.031333 0.029298 0.025012 0.028060
# 4        465 0.874721 0.009472 0.031426 0.029480 0.024909 0.028720
# 5        466 0.879688 0.006468 0.031602 0.029342 0.025329 0.028861
# 6        467 0.886569 0.004118 0.031521 0.029108 0.025481 0.028738
# 7        468 0.891913 0.003214 0.031123 0.029013 0.024849 0.028731
# 8        469 0.887680 0.002561 0.031609 0.029285 0.025036 0.028567

要将列与特定列相乘...假设使用SpecR 来获取您的output2 数据框,您可以使用transform(),然后排除第三列,如果您需要:

output2 <- transform(output1, 
                     Spec1 = Spec1 * SpecR,
                     Spec2 = Spec2 * SpecR,
                     Spec3 = Spec3 * SpecR,
                     Spec4 = Spec4 * SpecR )[,-3] 

#   Wavelength    SpecR      Spec1      Spec2      Spec3      Spec4
# 1        462 0.883542 0.02778916 0.02512882 0.02160790 0.02525782
# 2        463 0.877453 0.02759590 0.02506883 0.02151427 0.02482753
# 3        464 0.881011 0.02760472 0.02581186 0.02203585 0.02472117
# 4        465 0.874721 0.02748898 0.02578678 0.02178843 0.02512199
# 5        466 0.879688 0.02779990 0.02581181 0.02228162 0.02538868
# 6        467 0.886569 0.02794554 0.02580625 0.02259066 0.02547822
# 7        468 0.891913 0.02775901 0.02587707 0.02216315 0.02562555
# 8        469 0.887680 0.02805868 0.02599571 0.02222396 0.02535835

但如果您的列数不同,您可以朝这个方向做一些事情,包括第三列之后的所有列:

output2 <- cbind(output1$Wavelengt, output1$SpecR, output1[, -c(1:3)] * output1$SpecR) 

或者更简单直接在output1上做:

output1[, -c(1:3)] <- (output1[, -c(1:3)] * output1$SpecR)

如果需要,然后再次排除 Stdv 列。这将给出与上述转换相同的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-25
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 2015-11-21
    相关资源
    最近更新 更多