我有这个data.table:如何R中两列结合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
我试过在很多方面和没有工作。任何想法?
我有这个data.table:如何R中两列结合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
我试过在很多方面和没有工作。任何想法?
这是一个有点数据帧的乱七八糟的,你有两列一些理想的结果,但有似乎是一个缺乏的可预测性。你确定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 $城市与df_city $城2的非NA值替换的值,你可以做到以下几点:
city_df %>%
mutate(city = case_when(
!(is.na(city2)) ~ city2,
is.na(city2) ~ city)) %>%
select(city) %>%
mutate(city = tools::toTitleCase(tolower(city)))
这返回与上面相同的列。
请使用dput来提供更容易使用的示例数据,并包含您之前的一些尝试,以便我们可以更轻松地为您提供帮助。 –
'df2 < - ifelse(is.na(df $ CITY2),df $ CITY,df $ CITY2)' –