使用索引位置比较两列

时间:2019-06-28 11:46:48

标签: r dataframe data-analysis data-cleaning

The dataframe

我有一种情况,我必须比较数据框中的两列。条件是Field1列具有一组值。 Field2列的值很少,其余均为NA。还有另一列称为Field3。因此,这里的工作是将Field1的值与Field2进行比较。比较条件如下。

  1. 如果Field1在Field2中具有对应的行。复制Field2的行值。 例如位置和地点。所以,我必须复制地方。

  2. 如果Field1没有相应的Field2值。然后比较Field1 与Field3。将Field3的值复制到Field2。

请提出解决方法。

dft <- data.frame(Field1 = c("Location","Time","Date","Problem"), 
          Field2 = c("Place","Balance","NA","NA"),
          Field3 = c("NA","NA","Pay","NA"))

1 个答案:

答案 0 :(得分:2)

如果我正确理解了问题,则您尝试用NA中的值替换Field2中的Field3,并替换NA中的Field3使用Field2中的值。假设每次观察总是存在一个NA和一个Field2Field3中的字符串,则可以使用dplyr的coalesce进行合并:

library(dplyr)
mutate(df, Field4 = coalesce(Field2, Field3))

#### OUTPUT ####

    Field1  Field2 Field3  Field4
1 Location   Place   <NA>   Place
2     Time Balance   <NA> Balance
3     Date    <NA>    Pay     Pay
4  Problem    <NA>  Check   Check

只需确保您的NA确实是NA,而不是"NA"这样的字符串。例如,将该数据框中的值与您提供给我们的数据框进行比较。另外,请确保您的变量包含字符串而不是因素:

df <- data.frame(Field1 = c("Location","Time","Date","Problem"), 
                  Field2 = c("Place","Balance", NA, NA),
                  Field3 = c(NA, NA, "Pay","Check"), stringsAsFactors = F)

注意 :我替换了一个NA以匹配图像中的数据框,即c("NA","NA","Pay","NA")为{{1 }}。