R合并没有重复列

Cla*_*nry 6 merge r dataframe

我有两个数据帧.例如

require('xlsx')
csvData <- read.csv("myData.csv")
xlsData <- read.xlsx("myData.xlsx")
Run Code Online (Sandbox Code Playgroud)

csvData看起来像这样:

Period  CPI     VIX
1       0.029   31.740
2       0.039   32.840
3       0.028   34.720
4       0.011   43.740
5       -0.003  35.310
6       0.013   26.090
7       0.032   28.420
8       0.022   45.080
Run Code Online (Sandbox Code Playgroud)

xlsData看起来像这样:

Period  CPI     DJIA
1       0.029   12176
2       0.039   10646
3       0.028   11407
4       0.011   9563
5       -0.003  10708
6       0.013   10776
7       0.032   9384
8       0.022   7774
Run Code Online (Sandbox Code Playgroud)

当我合并这些数据时,CPI数据被复制,并且后缀被放在标题上,这是有问题的(我的真实df中有更多的列).

mergedData <- merge(xlsData, csvData, by = "Period")
Run Code Online (Sandbox Code Playgroud)

mergedData:

Period  CPI.x   VIX     CPI.y   DJIA
1       0.029   31.740  0.029   12176
2       0.039   32.840  0.039   10646
3       0.028   34.720  0.028   11407
4       0.011   43.740  0.011   9563
5       -0.003  35.310  -0.003  10708
6       0.013   26.090  0.013   10776
7       0.032   28.420  0.032   9384
8       0.022   45.080  0.022   7774
Run Code Online (Sandbox Code Playgroud)

我想合并数据框而不重复具有相同名称的列.例如,我想要这种输出:

Period  CPI     VIX     DJIA
1       0.029   31.740  12176
2       0.039   32.840  10646
3       0.028   34.720  11407
4       0.011   43.740  9563
5       -0.003  35.310  10708
6       0.013   26.090  10776
7       0.032   28.420  9384
8       0.022   45.080  7774
Run Code Online (Sandbox Code Playgroud)

我不想使用额外的'by'参数,或者从其中一个df中删除列,因为在两个df中都有太多的列重复.我只是在寻找一种动态的方法来在合并过程中删除那些重复的列.

谢谢!

A5C*_*2T1 9

by如果公共列的名称相同,则可以跳过参数.

来自?merge:

默认情况下,数据框在列上与它们都具有的名称合并,但列的单独规范可以由by.x和给出by.y.

记住这一点,以下内容应该有效(就像您对样本数据所做的那样):

merge(csvData, xlsData)
#   Period    CPI   VIX  DJIA
# 1      1  0.029 31.74 12176
# 2      2  0.039 32.84 10646
# 3      3  0.028 34.72 11407
# 4      4  0.011 43.74  9563
# 5      5 -0.003 35.31 10708
# 6      6  0.013 26.09 10776
# 7      7  0.032 28.42  9384
# 8      8  0.022 45.08  7774
Run Code Online (Sandbox Code Playgroud)

  • @Clark,也许使用`all = TRUE`?示例:`merge(csvdata [1:7,],xlsdata,all = TRUE)` (3认同)
  • 谢谢。我没有意识到“ by”是可选的。如果我的df长度不同怎么办?例如,假设csvData只有7行。我想保留来自xlsData的所有数据。然后将csvData绑定(对于与csvData对应的第8行,可以使用NULL)。 (2认同)