gpt4 book ai didi

r - R 中的 If/Else 语句

转载 作者:行者123 更新时间:2023-12-04 09:31:16 26 4
gpt4 key购买 nike

我在 R 中有两个数据框:

city         price    bedroom   
San Jose 2000 1
Barstow 1000 1
NA 1500 1

重新创建的代码:

data = data.frame(city = c('San Jose', 'Barstow'), price = c(2000,1000, 1500), bedroom = c(1,1,1))

和:

Name       Density
San Jose 5358
Barstow 547

重新创建的代码:

population_density = data.frame(Name=c('San Jose', 'Barstow'), Density=c(5358, 547));

我想根据条件在 data 数据集中创建一个名为 city_type 的附加列,因此如果城市人口密度高于 1000,则为城市,低于1000是郊区,NA是NA。

city         price    bedroom   city_type   
San Jose 2000 1 Urban
Barstow 1000 1 Suburb
NA 1500 1 NA

我正在为条件流使用 for 循环:

for (row in 1:length(data)) {
if (is.na(data[row,'city'])) {
data[row, 'city_type'] = NA
} else if (population[population$Name == data[row,'city'],]$Density>=1000) {
data[row, 'city_type'] = 'Urban'
} else {
data[row, 'city_type'] = 'Suburb'
}
}

for 循环在我有超过 20000 个观察值的原始数据集中运行没有错误;但是,它会产生很多错误的结果(大部分情况下会产生 NA)。

这里出了什么问题,我怎样才能做得更好才能达到我想要的结果?

最佳答案

对于这种类型的连接/过滤/变异工作流程,我已经成为 dplyr 管道的忠实粉丝。所以这是我的建议:

library(dplyr)

# I had to add that extra "NA" there, did you not? Hm...
data <- data.frame(city = c('San Jose', 'Barstow', NA), price = c(2000,1000, 500), bedroom = c(1,1,1))
population <- data.frame(Name=c('San Jose', 'Barstow'), Density=c(5358, 547));

data %>%
# join the two dataframes by matching up the city name columns
left_join(population, by = c("city" = "Name")) %>%
# add your new column based on the desired condition
mutate(
city_type = ifelse(Density >= 1000, "Urban", "Suburb")
)

输出:

      city price bedroom Density city_type
1 San Jose 2000 1 5358 Urban
2 Barstow 1000 1 547 Suburb
3 <NA> 500 1 NA <NA>

关于r - R 中的 If/Else 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52919632/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com