我有这个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
我在很多方面尝试过,没有任何效果。有什么想法吗?
答案 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)))
返回与上面相同的列。