在R语言中-我可以说我有一个DF,其中有两列 Fam 和 Prop 都是分类的,现在 Fam 具有重复的名称例如Algea,Fungi等,Prop列具有分类编号和NA。我如何获得表/输出,对于每个A值,它告诉我没有多少个值。 NA示例:
Fam Prop
-------------
Algea one
Fungi two
Algea NA
Algea three
Fungi one
Fungi NA
输出:
Algea 2
Fungi 2
我知道使用count函数应该是解决方案的指导,但似乎无法解决,因为Fam列具有重复值。
答案 0 :(得分:1)
也许是这样。
trade_id ccy_pairs notional trade_type value_date
0 1 AUD 1.0 buy 01012018
2 3 GBP 1.5 buy 05062018
3 4 EUR 2.0 sell 03062018
4 5 NZD 6.0 buy 07082018
5 6 NZD 7.0 buy 09082020
答案 1 :(得分:1)
四种解决方案:
基本R帧:
aggregate(DF$Prop, by=list(Fam=DF$Fam), FUN=function(a) sum(!is.na(a)))
# Fam x
# 1 A 5
# 2 B 6
# 3 C 4
R的基数,“表”(不是框架,请参见as.data.frame(xtabs(...))
以查看框架的变化形式……有点不同):
xtabs(~ Fam + is.na(Prop), data=DF)
# is.na(Prop)
# Fam FALSE TRUE
# A 5 1
# B 6 1
# C 4 3
dplyr
:
library(dplyr)
DF %>%
group_by(Fam) %>%
summarize(n = sum(!is.na(Prop)))
# # A tibble: 3 x 2
# Fam n
# <fct> <int>
# 1 A 5
# 2 B 6
# 3 C 4
data.table
library(data.table)
# data.table 1.11.4 Latest news: http://r-datatable.com
# Attaching package: 'data.table'
# The following objects are masked from 'package:dplyr':
# between, first, last
DT <- as.data.table(DF)
DT[,sum(!is.na(Prop)),keyby=.(Fam)]
# Fam V1
# 1: A 5
# 2: B 6
# 3: C 4
数据:
DF <- data.frame(Fam=sample(c('A','B','C'), size=20, replace=TRUE), Prop=sample(c('one','two','three'), size=20, replace=TRUE))
DF$Prop[sample(20,size=5)] <- NA
DF
# Fam Prop
# 1 B one
# 2 B three
# 3 C <NA>
# 4 A <NA>
# 5 C one
# 6 A two
# 7 B one
# 8 A three
# 9 B two
# 10 C one
# 11 C two
# 12 B three
# 13 C <NA>
# 14 C <NA>
# 15 A one
# 16 A one
# 17 B three
# 18 A two
# 19 C two
# 20 B <NA>
答案 2 :(得分:0)
dplyr
种可能性:
df %>%
add_count(Fam, miss = !is.na(Prop)) %>%
group_by(Fam) %>%
summarise(Non_miss = first(n[miss = TRUE]))
df %>%
filter(!is.na(Prop)) %>%
group_by(Fam) %>%
tally()
df %>%
filter(!is.na(Prop)) %>%
group_by(Fam) %>%
summarise(Non_miss = n())
答案 3 :(得分:0)
Base R最短(也是最快?)解决方案
let userIDList = await col.find({
$or: [
{permission: 'student'},
{permission: 'staff'}
]},{ select : ['_id'] }).toArray();
let final = userIDList.map((v, i) => { return v._id });
console.log(final);
它使用number.of.not.NAs <- table(df$Fam[!is.na(df$Prop)])
,但仅选择在df$Fam
向量位置上没有NA
的元素。然后使用您提到的df$Prop
函数。
Base R常规解决方案
或者,您可以通过table
将数据框拆分为数据框列表,
然后为每个数据帧计数第二列中有多少个非NA元素-通常为split-apply-combine方法。 (但是我想上面的df$Fam
方法会更快)。
table