【发布时间】:2016-02-09 22:16:35
【问题描述】:
我有以下数据框。我想在两个数据框中匹配 X 列中的值(两列中的 X 值相同)并在 Cost 列中添加值并创建一个包含 X 列、lat 列、long 列的新数据框,然后显示合并/汇总的值,如下所示
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。
更新: 我使用以下代码来获取成本的总和值并保留所有原始列并忽略文本/字符串和 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"
我希望在第一步中就这样做。但我想这也行得通。
【问题讨论】:
-
告诉我们更多关于专栏
X,在data1和data2中是否相同? -
哦,是的,对不起。 X中的列是相同的。可能顺序不同,但两列的 X 值相同
-
data2$Cost <-data2$Cost + data1$Cost[match(data2$X, data1$X)] -
我刚刚运行了这段代码并得到了一个错误,并注意到成本列中也有一些字符串值和空单元格。我希望字符串值保持原样并空单元格以显示 NA。此外,您的代码会在同一数据集 data2 中产生成本。我想要一个包含原始列的新数据框,成本列应该是原始 2 个数据框的总和/合并值
-
我找到的解决方案,不考虑非数值,是:data2[data2$X %in% data1$X,]$Cost