我有以下数据框。我希望在两个数据框中匹配X列中的值(两列中的X值相同)并在“成本”列中添加值并创建一个包含列X,列lat,列长的新数据帧然后显示合并/总结值,如下所示
data1
X Cost lat long
1 RA123 60 -113.8 NA
2 RA124 50 -113.8 NA
3 RB131 40 -113.8 NA
4 RB132 30 -113.8 NA
5 RB133 20 -113.8 NA
6 RC134 10 -113.8 NA
7 RC135 No -113.9 NA
8 RD136 -113.7 NA
data2
X Cost lat long
1 RA123 10 -113.8 NA
2 RA124 20 -113.8 NA
3 RB131 40 -113.8 NA
4 RB132 30 -113.8 NA
5 RB133 50 -113.8 NA
6 RC134 60 -113.8 NA
7 RC135 No -113.9 NA
8 RD136 -113.7 NA
consolidated # this dataframe contains sum of cost from dataframe 1 and 2 but also has original columns
X Cost lat long
1 RA123 70 -113.8 NA
2 RA124 70 -113.8 NA
3 RB131 80 -113.8 NA
4 RB132 60 -113.8 NA
5 RB133 70 -113.8 NA
6 RC134 70 -113.8 NA
7 RC135 No -113.9 NA
8 RD136 -113.7 NA
“成本”中的某些值是文本字符串,有些值是空白/无值。我现在想忽略文本字符串,没有值/空单元格,我想要一个NA。
更新: 我使用以下代码来获取Cost的总计值并保留所有原始列并忽略文本/字符串和NA值,即只要有文本字符串,值就会显示NA。没有输入值的空单元格也显示NA:
Consolidated$Cost<- as.numeric(as.character(Consolidated$cost.x)) + as.numeric(as.character(Consolidated$cost.y))
现在,我需要做的是在有文本字符串的地方,我需要能够将“TextValue”显示为值而不是NA。只是为了突出显示,无论字符串值是什么,对于data1和data2两者中的任何给定X值,它都是相同的。
更新:我必须使用以下方法将合并列中的这些行重命名为“TextValue”:
Consolidated$Cost[is.na(Consolidated$Cost)] <- "TextValue"
我希望在第一步中做到这一点。但我想这也有效。
答案 0 :(得分:1)
我认为你可以通过简单的合并和添加来做到这一点。首先设置数据的子集,前面是空字符串值:
data1 <- data.frame(X=c("RA123", "RA124", "RA131"),
COST=c("60", "50", ""),
lat=c(-113.8,-113.8, -113.8),
long = c("NA", "NA", "NA"))
data2 <- data.frame(X=c("RA123", "RA124", "RA131"),
COST=c("10", "20", "30"),
lat=c(-113.8,-113.8, -113.8),
long = c("NA", "NA", "NA"))
然后您可以通过执行以下操作从数据框中删除空字符串值:
data1 <-subset(data1,COST!="")
击> <击> 撞击>
然后,您可以将因子COST
列转换为数字,如this SO post中所述:
data1$COST <- as.numeric(as.character(data1$COST))
data2$COST <- as.numeric(as.character(data2$COST))
这将使用&#34; NA&#34;替换空字符串值。数值。一旦进入那个形式的数字&#34; NA&#34; +任何其他数字只等于另一个&#34; NA&#34;。所以你可以继续我最初建议的合并:
combined <- merge(data1,data2, by="X")
combined$COST <- combined$COST.x + combined$COST.y
从那里你可以使用subset(combined, select = -c(lat.x,long.x,...) )
删除列。您还可以添加all=TRUE
或all.x=TRUE
或all.y=TRUE
来更改保持data1或data2值的行为。有关合并功能的详细信息,请参阅this SO question。