如何组合R data.table中的两列如下:

时间:2017-07-26 17:28:32

标签: r csv merge data.table

我有这个data.table:

CITY         CITY2
Phoenix      NA
NASHVILLE    Nashville
Los Angeles  Los Angeles
NEWYORK      New York
CHICAGO      NA

这是我想要的结果:

CITY
Phoenix
Nashville
Los Angeles
New York
CHICAGO

我在很多方面尝试过,没有任何效果。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

由于我的绝望,我没有停止研究并找到了解决方案:

myDataTable[ is.na( CITY2 ) & !is.na( CITY ), CITY2 := CITY, ]

答案 1 :(得分:0)

这是一个混乱的数据帧,因为你在两个列中都有一些理想的结果,但似乎缺乏可预测性。您确定city2对于非NA的所有值都具有正确的格式吗? 无论哪种方式,使用dplyr和"工具"有两种方法可以使用正确的城市名称大写来获得最终的预期答案。封装

library(dplyr)
library(tools) 
city_df <- data.frame(
city = c("Phoenix", "NASHVILLE", "Los Angeles", "NEWYORK", "CHICAGO"),
city2 = c(NA, "Nashville", "Los Angeles", "New York", NA), 
stringsAsFactors = FALSE)

第一种方法假设city_df $ city包含所有城市,但格式不正确。

 city_df %>% 
 mutate(city = 
        replace(x = city, city == "NEWYORK", values = "New York")) %>% 
select(city) %>% 
mutate(city = tools::toTitleCase(tolower(city)))

返回

      city
1     Phoenix
2   Nashville
3 Los Angeles
4    New York
5     Chicago

如果您需要将df_city $ city的值替换为df_city $ city2的非NA值,您可以执行以下操作:

city_df %>% 
 mutate(city = case_when(
                         !(is.na(city2)) ~ city2,
                         is.na(city2)    ~ city)) %>% 
 select(city) %>% 
 mutate(city = tools::toTitleCase(tolower(city)))

返回与上面相同的列。