gpt4 book ai didi

r - 如何使用 dplyr 使用默认值填充空数据框?

转载 作者:行者123 更新时间:2023-12-05 02:27:27 24 4
gpt4 key购买 nike

我得到这个正确的输出运行代码紧接在它下面,计算“A”出现在 myData 数据框的 Element 列中的次数:

  Element counted
1 A 4

以上输出代码:

library(dplyr)

myData = data.frame(Element = c("A","A","C","A","B","B","A"),Class = c(0,0,0,0,1,1,2))

myData %>%
filter(Element == 'A') %>%
count(Element, name = 'counted')

但是,我想更改代码,以便它在针对不存在的元素运行时返回计数为 0 的数据帧。我需要这个用于一系列回顾 myData 数据帧的 ifelse(...) 语句。因此,当为不存在的元素 D 运行此代码时:

myData %>% 
filter(Element == 'D') %>%
count(Element, name = 'counted')

我想回去:

  Element counted
1 D 0

而不是代码当前生成的这个:

[1] Element counted
<0 rows> (or 0-length row.names)

在完整代码中,D 是未知的,落在元素 A - C 之外。我想为 A -C 之外的任何元素返回 0。我想在不在因子水平中包含元素“D”的情况下执行此操作。

dplyr 中是否有巧妙的方法?

最佳答案

Element 转换为 factor 并给出你想要的所有级别,然后在 count() .drop = FALSE:

myData %>%
mutate(Element = factor(Element, levels = c('A', 'B', 'C', 'D'))) %>%
count(Element, .drop = FALSE)

# Element n
# 1 A 4
# 2 B 2
# 3 C 1
# 4 D 0

更新

它看到你想检查一个元素是否包含在 Element 中。如果是,则计算其数量;否则,打印 0。您可以分配要在外部检查的元素并使用以下代码:

x <- c('A', 'D')

myData %>%
filter(Element %in% x) %>%
mutate(Element = factor(Element, levels = x)) %>%
count(Element, .drop = FALSE)

# Element n
# 1 A 4
# 2 D 0

补充

.drop 实际上是group_by() 中的一个参数。这条线

%>% count(Element, .drop = FALSE)

相当于

%>% group_by(Element, .drop = FALSE) %>% tally()

引擎盖下。而tally也可以追溯到summarise(n = n())

关于r - 如何使用 dplyr 使用默认值填充空数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73163579/

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