需要有关正确合并两个data.frames的帮助

时间:2014-06-02 13:37:04

标签: r csv

我需要帮助正确合并两个data.frame

我首先要做的是导入一个包含三列的CSV(“Startmeter”,“Endmeter”,“Information”)

然后我想用0到40000米的简单序列与CSV中的现有数据一起发出。如果有人可以提供帮助,那就没问题了。)

=== First Data.Frame(简单序列)

Meter
87
88
89
90
91
92
93
94
95
96

===第二个Data.Frame(CSV数据)

Meter        Information

90           1
91           1
92           1
93           1
101          2
102          2
103          2

===最终产品(它应该如何)

Meter        Information

88           NA
89           NA
90           1
91           1
92           1
93           1
94           NA
95           NA
96           NA
97           NA
98           NA
99           NA
100          NA
101          2
102          2
103          2
104          NA
105          NA
....

我的代码到目前为止的表现如何:

csvlesen<-read.csv("C:\\Users\\Username\\Desktop\\R\\File.csv",header = TRUE, sep = ";", quote="", dec=",")

lastmeter<- csvlesen[nrow(csvlesen),2]*1000  
startmeter <- csvlesen[ ,1]*1000
endmeter <- csvlesen[ ,2]*1000      
information<- csvlesen[ ,16]

d <- data.frame()
e <- data.frame(0:lastmeter)
colnames(e) <- c("Meter")  

for (i in 1:lastmeter) { 
  m <-seq(startmeter[i],endmeter[i])
  m_final <- head(m, -1) 
  csvmeter <- cbind(m_final,information[i])  
  colnames(csvmeter) <- c("Meter","Information")  
  d <- rbind(d,csvmeter)   
}

2 个答案:

答案 0 :(得分:2)

您希望使用merge执行以下操作。 首先,我们创建一些玩具数据,然后我们使用mergedata.frame合并为一个。

df1 <- data.frame(Meter = 41:50)
df1
#   Meter
#1     41
#2     42
# [...]
#9     49
#10    50

df2 <- data.frame(Meter = 41:50+5, Information = rnorm(10))
df2
#   Meter Information
#1     46   0.8155859
#2     47   0.9530017
# [...]
#9     54   0.8817336
#10    55   0.3645192

merge(df1, df2, by = "Meter", all = TRUE)
#   Meter Information
#1     41          NA
#2     42          NA
#3     43          NA
#4     44          NA
#5     45          NA
#6     46   0.8155859
#7     47   0.9530017
#8     48   2.3560323
#9     49  -2.5787036
#10    50   2.8828521
#11    51   0.8408719
#12    52  -0.5162573
#13    53   0.5103627
#14    54   0.8817336
#15    55   0.3645192

答案 1 :(得分:1)

除了merge,另一种可能的解决方案是使用ifelsematch的组合:

firstDF$Information <- ifelse(match(firstDF$Meter,secondDF$Meter), secondDF$Information, NA)