我根据第一个数据表的属性合并了两个数据集。
dat1 <- read.table(header=TRUE, text="
ID log MN CD NM
a001 0.1 dat01 mn34 tt03
a002 2.3 dat02 mn35 tt09
a003 4.5 dat03 mn36 tt15
a004 7.89 dat04 mn37 tt21
a005 4.1 dat05 mn38 tt27
a006 4.5 dat06 mn39 tt33
a007 6.1 dat13 mn40 tt39
a008 9 dat14 mn41 tt45
a009 2.3 dat15 mn42 tt51
a010 3.4 dat16 mn01 tt57
a011 3.23 dat17 mn02 tt63
a012 1.23 dat18 mn03 tt69
a013 2.11 dat19 mn04 tt75
")
dat1
ID log MN CD NM
1 a001 0.10 dat01 mn34 tt03
2 a002 2.30 dat02 mn35 tt09
3 a003 4.50 dat03 mn36 tt15
4 a004 7.89 dat04 mn37 tt21
5 a005 4.10 dat05 mn38 tt27
6 a006 4.50 dat06 mn39 tt33
7 a007 6.10 dat13 mn40 tt39
8 a008 9.00 dat14 mn41 tt45
9 a009 2.30 dat15 mn42 tt51
10 a010 3.40 dat16 mn01 tt57
11 a011 3.23 dat17 mn02 tt63
12 a012 1.23 dat18 mn03 tt69
13 a013 2.11 dat19 mn04 tt75
dat2 <- read.table(header=TRUE, text="
ID LT LF DC TM NM
a001 0 1 p01 p001 pn07
a003 4.1 4.9 p02 p002 pn08
a004 2.1 5.6 p03 p003 pn09
a008 8.7 9.29 p04 p004 pn10
a009 2 2.3 p05 p005 pn11
a010 1 2 p06 p006 pn12
a023 1 2 p07 p007 pn13
a024 1 2 p08 p008 pn14
")
dat2
ID LT LF DC TM NM
1 a001 0.0 1.00 p01 p001 pn07
2 a003 4.1 4.90 p02 p002 pn08
3 a004 2.1 5.60 p03 p003 pn09
4 a008 8.7 9.29 p04 p004 pn10
5 a009 2.0 2.30 p05 p005 pn11
6 a010 1.0 2.00 p06 p006 pn12
7 a023 1.0 2.00 p07 p007 pn13
8 a024 1.0 2.00 p08 p008 pn14
dat1
有一个名为log
的列,在LT
LF
dat2
范围内需要LT <=log <=LF
和ID
}}与dplyr
匹配后。我正在mutate
与 ID log LT LF MN CD NM DC TM NM.1
1 a001 0.1 0.0 1.00 dat01 mn34 tt03 p01 p001 pn07
2 a003 4.5 4.1 4.90 dat03 mn36 tt15 p02 p002 pn08
3 a008 9.0 8.7 9.29 dat14 mn41 tt45 p04 p004 pn10
4 a009 2.3 2.0 2.30 dat15 mn42 tt51 p05 p005 pn11
一起尝试但不能正常工作。输出将如下:
for i in range(0,len(df.columns)):
df.iloc[:,i] = np.where(df['Month_Counter'] >= i + 1, 'X', df.iloc[:,i])
我希望为两个表中的所有列值合并数据。这只是一个包含2,000,000行和1700列的大型表的示例。
答案 0 :(得分:2)
library(dplyr)
dat <- left_join(dat1, dat2, by = "ID")
dat_fil <- filter(dat, log >= LT, log <= LF)
dat_fil
ID log MN CD NM.x LT LF DC TM NM.y
1 a001 0.1 dat01 mn34 tt03 0.0 1.00 p01 p001 pn07
2 a003 4.5 dat03 mn36 tt15 4.1 4.90 p02 p002 pn08
3 a008 9.0 dat14 mn41 tt45 8.7 9.29 p04 p004 pn10
4 a009 2.3 dat15 mn42 tt51 2.0 2.30 p05 p005 pn11
答案 1 :(得分:1)
尝试data.table方式:)
dat1 = data.table(dat1)
dat2 = data.table (dat2)
merged.dat = dat2 [dat1, on = "ID"] [ LT <= log & log <= LF ]
给你:
ID LT LF DC TM NM log MN CD i.NM
1: a001 0.0 1.00 p01 p001 pn07 0.1 dat01 mn34 tt03
2: a003 4.1 4.90 p02 p002 pn08 4.5 dat03 mn36 tt15
3: a008 8.7 9.29 p04 p004 pn10 9.0 dat14 mn41 tt45
4: a009 2.0 2.30 p05 p005 pn11 2.3 dat15 mn42 tt51
您可以通过键入表格来进一步优化速度。输入?data.table并检查快速&#34;键入&#34;子集并通过小插图