gpt4 book ai didi

r - 锅直方图并有错误 "missing value where TRUE/FALSE needed"

转载 作者:行者123 更新时间:2023-12-04 07:34:20 25 4
gpt4 key购买 nike

更新:
原来它是由不同类别的变量引起的。
非常感谢@r2evans,他通过在读取数据时将 interger64 转换为数字来解决这个问题。他的方法是有效的,但值得进一步研究的是他的解决问题的逻辑。
出于保密原因,我删除了数据。
下面是上一个问题
我在我的数据表中绘制了所有数字 clomuns 的直方图。

head(dt) %>%
keep(is.numeric) %>%
gather() %>% na.omit() %>%
ggplot(aes(value)) +
facet_wrap(~ key, scales = "free") +
geom_histogram()
我选择 head() 因为数据表太大。
然后我遇到了这个错误:

Error in if (length(unique(intervals)) > 1 & any(diff(scale(intervals)) < :missing value where TRUE/FALSE needed


然后我让
eg <- head(dt)
write.csv2(head(dt), "eg.csv")
并保存例如 here在github上。
然后
eg <- fread("https://raw.githubusercontent.com/Deborah-Jia/Complete_Analysis_da2/main/eg.csv")

eg %>%
keep(is.numeric) %>%
gather() %>% na.omit() %>%
ggplot(aes(value)) +
facet_wrap(~ key, scales = "free") +
geom_histogram()
我得到了那些正确的直方图!
当我保存数据并再次读取时发生了什么?或者有没有办法修复dt?
PS:dt 也是通过保存 csv 和从 fread 读取而创建的。
当我使用
eg <- head(dt, 10000)
并将其保存在 github ,再读。发生了同样的错误。
是不是因为我的 dt 太长(300 万行)并且有一些错误的行?

最佳答案

问题症状 是您的两个字段是 出现 不变的。下载完整数据后dt :

dt <- fread("https://raw.githubusercontent.com/Deborah-Jia/Complete_Analysis_da2/main/eg1.csv")
dt %>%
keep(is.numeric) %>%
gather() %>%
na.omit() %>%
group_by(key) %>%
summarize(v = var(value))
# Warning: attributes are not identical across measure variables;
# they will be dropped
# # A tibble: 9 x 2
# key v
# <chr> <dbl>
# 1 area_size_high 1.00e18
# 2 area_size_low 3.64e10
# 3 lot_size_high 8.76e17
# 4 lot_size_low 5.60e 5
# 5 price_huf_high 0. ### problem!
# 6 price_huf_low 0.
# 7 total_room_count_high 3.23e17
# 8 total_room_count_low 1.46e 0
# 9 V1 8.33e 6
(当数据不变时,许多图往往会内爆。)
然而,这令人困惑,因为 head(dt)肯定显示不同的值(右侧):
          V1         ds                            search_id property_type property_subtype price_huf_low price_huf_high
<int> <IDat> <char> <char> <char> <i64> <i64>
1: 1 2021-02-15 ad2be212-0c25-4e3a-aabf-be089053beba house <NA> 45000000 69000000
2: 2 2021-02-15 ab72ba19-d00f-49e2-8d0d-c6836f030758 apartment <NA> 0 48000000
3: 3 2021-02-06 24bbb050-2ecb-4078-a8dc-65e968f72f43 apartment <NA> 150000000 200000000
4: 4 2021-02-06 f7d87e6e-0f24-4d9e-ae82-2a448d6290bf apartment <NA> 2000000 29000000
5: 5 2021-02-14 71ea3cc4-5326-4bbe-a2ff-20dbae0d9aa8 apartment <NA> 200000000 400000000
(截断)。
但是,关键要看还有 i64 ,请注意这些是 64 位整数。
sapply(dt, function(z) class(z)[1])
# V1 ds search_id property_type property_subtype
# "integer" "IDate" "character" "character" "character"
# price_huf_low price_huf_high area_size_low area_size_high lot_size_low
# "integer64" "integer64" "integer" "integer" "integer"
# lot_size_high total_room_count_low total_room_count_high district
# "integer" "integer" "integer" "character"
您可以通过以下两种方式之一解决此问题:
  • 在阅读时修复它(推荐):
    dt <- fread("https://raw.githubusercontent.com/Deborah-Jia/Complete_Analysis_da2/main/eg1.csv",
    integer64 = "numeric")
  • 使用您环境中的数据修复它:
    ### data.table (since you used `fread`)
    dt[, c("price_huf_low", "price_huf_high") := lapply(.SD, as.numeric),
    .SDcols = c("price_huf_low", "price_huf_high")]

    ### or dplyr
    dt %>%
    mutate(across(starts_with("price"), as.numeric)) %>% # ... rest of your pipe
    ### if more than 'price_*' columns:
    dt %>%
    mutate(across(where(~ inherits(., "integer64")), as.numeric)) %>% # ...

  • 无论哪种方式,一旦这两列转换为 numeric ,它们可以用您的原始代码绘制:
    dt %>%
    keep(is.numeric) %>%
    gather() %>% na.omit() %>%
    ggplot(aes(value)) +
    facet_wrap(~ key, scales = "free") +
    geom_histogram()
    proper multi-variable histogram

    关于r - 锅直方图并有错误 "missing value where TRUE/FALSE needed",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67810309/

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