我有两个单独的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=',')
答案 0 :(得分:2)
要将您的csv1
数据框加入csv2
{J} output1
,您可以使用merge()
...更多关于加入{{3} }}
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
列,如果需要的话。这将产生与上述转换相同的结果。