2016-10-12 4 views
1

私はRを使用しており、それぞれ3列を含む2枚のExcelシートからデータをインポートしています。最初の行列は3列(1〜3)と380行を含み、2番目の行列は3列と365行を含みます。列2および列3は、常に最初の列に対応する値です。私は、2つの行列の最初の列を1つの列にマージして、2つの列の同じ値をマージした後に置き換えます(個々の行に順番に並べるべきではありません)。昇順。また、主な条件は、各行列の列2,3(列1の値)は対応して再整理されるべきですが、マージされるべきではありません。対応する列に値が存在しない最初の列(マージ後に生成される)にいくつかの値がある場合は、ゼロに置き換える必要があります。私は最初の列のマージと並べ替えを行っていますが、他の列の対応する変更はできません。どうすればいいですか?ここ他の対応する列を考慮してRの2つの列をマージするか?

は、2つの行列である:

Column 1 - Merged 1st columns of matrices A and B (ascending order) 
Column 2 - Rearranged based on change in row positions of column 1 in matrix A 
Column 3 - Rearranged based on change in row positions of column 1 in matrix A 
Column 4 - Rearranged based on change in row positions of column 1 in matrix B 
Column 5 - Rearranged based on change in row positions of column 1 in matrix B 

:マージ後

マトリックス

92.6691  1076.5  0.48 
93.324  1110.1  0.5 
96.9597  1123.3  0.5 
97.7539  968.4  0.43 
98.992  1006.1  0.45 
99.0061  5584.6  2.49 
101.0243 1555.7  0.69 
101.0606 12821.2  5.72 
102.1221 972   0.43 

行列B

95.4466  974.2  0.43 
99.0062  4721.9  2.06 
100.0321 1040.1  0.45 
101.0241 2115.8  0.92 
101.0606 15202.8  6.64 
102.2736 945.3  0.41 
108.4273 1059.7  0.46 
115.0397 25106.3  10.96 
115.0761 54740  23.9 

、結果は単一の行列でなければなりませんここはE結果の行列:行列A及びBにおいて、値101.0606が共通であること

92.6691  1076.5  0.48  0  0 
93.324  1110.1  0.5  0  0 
95.4466  0   0   974.2 0.43 
96.9597  1123.3  0.5  0  0 
97.7539  968.4  0.43  0  0 
98.992  1006.1  0.45  0  0 
99.0061  5584.6  2.49  0  0 
99.0062  0   0   4721.9 2.06 
100.0321 0   0   1040.1 0.45 
101.0241 0   0   2115.8 0.92 
101.0243 1555.7  0.69  0  0 
101.0606 12821.2  5.72  15202.8 6.64 
102.1221 972   0.43  0  0 
102.2736 0   0   945.3 0.41 
108.4273 0   0   1059.7 0.46 
115.0397 0   0   25106.3 10.96 
115.0761 0   0   54740 23.9 

注意。

+0

入力と出力の例を教えてください。 – discipulus

+0

@discipulus質問を更新しました – novicegeek

+1

提供されたサンプルデータで期待される出力を示してください。その説明は完全には明確ではない。 – Uwe

答えて

2

これはmerge()で簡単に行うことができます。

# read your data: 
read.table(
     t="92.6691  1076.5  0.48 
      93.324  1110.1  0.5 
      96.9597  1123.3  0.5 
      97.7539  968.4  0.43 
      98.992  1006.1  0.45 
      99.0061  5584.6  2.49 
      101.0243 1555.7  0.69 
      101.0606 12821.2  5.72 
      102.1221 972   0.43") -> M1 
read.table(
     t="95.4466  974.2  0.43 
      99.0062  4721.9  2.06 
      100.0321 1040.1  0.45 
      101.0241 2115.8  0.92 
      101.0606 15202.8  6.64 
      102.2736 945.3  0.41 
      108.4273 1059.7  0.46 
      115.0397 25106.3  10.96 
      115.0761 54740  23.90") -> M2 

# merge data -- note `all = TRUE` 
result <- merge(M1,M2,by = "V1", all = TRUE) 

# replace na with 0 
result[is.na(result)] <- 0 

result 
#  V1 V2.x V3.x V2.y V3.y 
# 1 92.67 1076.5 0.48  0.0 0.00 
# 2 93.32 1110.1 0.50  0.0 0.00 
# 3 95.45  0.0 0.00 974.2 0.43 
# 4 96.96 1123.3 0.50  0.0 0.00 
# 5 97.75 968.4 0.43  0.0 0.00 
# 6 98.99 1006.1 0.45  0.0 0.00 
# 7 99.01 5584.6 2.49  0.0 0.00 
# 8 99.01  0.0 0.00 4721.9 2.06 
# 9 100.03  0.0 0.00 1040.1 0.45 
# 10 101.02  0.0 0.00 2115.8 0.92 
# 11 101.02 1555.7 0.69  0.0 0.00 
# 12 101.06 12821.2 5.72 15202.8 6.64 
# 13 102.12 972.0 0.43  0.0 0.00 
# 14 102.27  0.0 0.00 945.3 0.41 
# 15 108.43  0.0 0.00 1059.7 0.46 
# 16 115.04  0.0 0.00 25106.3 10.96 
# 17 115.08  0.0 0.00 54740.0 23.90 
+0

これは非常に簡単でした。完全に動作:) – novicegeek

0

自分でデータを生成しましたが、自分で置き換えることができます。ここでは、2つのファイルをマージする必要があります。最初に垂直に、次に水平に。最後に、最初の列に従って順序付けします。

set.seed(42) 
# Load data 1 
dat1<- as.data.frame(matrix(rexp(30), 10)) 

# Inly keep unique rows 
dat1 <- unique(dat1) 

set.seed(24) 
# Load data 2 
dat2 <-as.data.frame(matrix(rexp(30), 10)) 

# Inly keep unique rows 
dat2 <- unique(dat2) 

# Copy it in temp 
dat2n <-dat2 

# sed second and third column to 0s 
dat2n[,2:3] <- 0  
# Concatenate them and keep only unique 
dat <- rbind(dat1,dat2n) 

# Merge dat and dat2 with respect to column 1 and keep everything in dat 

fin.dat <- merge(dat, dat2, by="V1", all.x = TRUE) 

# Finally order the dataframe 
fin.dat <- fin.dat[order(fin.dat[,1], decreasing = FALSE),] 
# Replace NA with zeros 
fin.dat[is.na(fin.dat)] <- 0 
1
df3 <- merge(df1,df2,all.x=T,all.y=T) 
df3[is.na(df3)] <- 0 

      x  a b  c  d 
1 92.6691 1076.5 0.48  0.0 0.00 
2 93.3240 1110.1 0.50  0.0 0.00 
3 95.4466  0.0 0.00 974.2 0.43 
4 96.9597 1123.3 0.50  0.0 0.00 
5 97.7539 968.4 0.43  0.0 0.00 
6 98.9920 1006.1 0.45  0.0 0.00 
7 99.0061 5584.6 2.49  0.0 0.00 
8 99.0062  0.0 0.00 4721.9 2.06 
9 100.0321  0.0 0.00 1040.1 0.45 
10 101.0241  0.0 0.00 2115.8 0.92 
11 101.0243 1555.7 0.69  0.0 0.00 
12 101.0606 12821.2 5.72 15202.8 6.64 
13 102.1221 972.0 0.43  0.0 0.00 
14 102.2736  0.0 0.00 945.3 0.41 
15 108.4273  0.0 0.00 1059.7 0.46 
16 115.0397  0.0 0.00 25106.3 10.96 
17 115.0761  0.0 0.00 54740.0 23.90 

データ

df1 

x   a b 
92.6691 1076.5 0.48 
93.324 1110.1 0.5 
96.9597 1123.3 0.5 
97.7539 968.4 0.43 
98.992 1006.1 0.45 
99.0061 5584.6 2.49 
101.0243 1555.7 0.69 
101.0606 12821.2 5.72 
102.1221 972  0.43 
df2 
x    c d 
95.4466 974.2 0.43 
99.0062 4721.9 2.06 
100.0321 1040.1 0.45 
101.0241 2115.8 0.92 
101.0606 15202.8 6.64 
102.2736 945.3 0.41 
108.4273 1059.7 0.46 
115.0397 25106.3 10.96 
115.0761 54740 23.9 
関連する問題