gpt4 book ai didi

r - 使用 rowwise() 计算数据帧每一行中 NA 的数量的问题

转载 作者:行者123 更新时间:2023-12-03 18:11:03 25 4
gpt4 key购买 nike

我在使用 rowwise() 计算每行中的 NA 数量时遇到问题。我的最小例子:

df <- data.frame(Q1 = c(rep(1, 1), rep(NA, 9)),
Q2 = c(rep(2, 2), rep(NA, 8)),
Q3 = c(rep(3, 3), rep(NA, 7))
)
df
Q1 Q2 Q3
1 1 2 3
2 NA 2 3
3 NA NA 3
4 NA NA NA
5 NA NA NA
6 NA NA NA
7 NA NA NA
8 NA NA NA
9 NA NA NA
10 NA NA NA
我想创建一个新列来计算每行中 NA 的数量。我可以通过写作来做到这一点
 df$Count_NA <- rowSums(is.na(df))
df
Q1 Q2 Q3 Count_NA
1 1 2 3 0
2 NA 2 3 1
3 NA NA 3 2
4 NA NA NA 3
5 NA NA NA 3
6 NA NA NA 3
7 NA NA NA 3
8 NA NA NA 3
9 NA NA NA 3
10 NA NA NA 3
但是,如果我尝试使用 rowwise() 通过 dplyr 执行此操作,则会得到错误的答案 - Count_NA 列在每一行中具有相同的数字:
df %>%
rowwise() %>%
mutate(Count_NA = sum(is.na(.)))
# A tibble: 10 x 4
# Rowwise:
Q1 Q2 Q3 Count_NA
<dbl> <dbl> <dbl> <int>
1 1 2 3 24
2 NA 2 3 24
3 NA NA 3 24
4 NA NA NA 24
5 NA NA NA 24
6 NA NA NA 24
7 NA NA NA 24
8 NA NA NA 24
9 NA NA NA 24
10 NA NA NA 24
我做错了什么,我该如何解决?
提前谢谢了
托马斯·菲利普斯

最佳答案

一个问题是.这里解析为整个框架,而不仅仅是整行。
另一种 dplyr 方法,使用 c_across :

df %>%
rowwise() %>%
mutate(a=sum(is.na(c_across(everything()))))
# # A tibble: 10 x 4
# # Rowwise:
# Q1 Q2 Q3 a
# <dbl> <dbl> <dbl> <int>
# 1 1 2 3 0
# 2 NA 2 3 1
# 3 NA NA 3 2
# 4 NA NA NA 3
# 5 NA NA NA 3
# 6 NA NA NA 3
# 7 NA NA NA 3
# 8 NA NA NA 3
# 9 NA NA NA 3
# 10 NA NA NA 3
我可以看到使用这个和 cur_data() 之间的最大区别是 c_across允许更直接地进行变量选择,如 c_across(starts_with("Q")) .当然,人们总是可以 select(cur_data(),...) ,所以这是一个弱论证。

关于r - 使用 rowwise() 计算数据帧每一行中 NA 的数量的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67150864/

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