在R中的DataFrame中按组计算非NA值
在本文中,我们将讨论如何在 R 编程语言中按数据帧中的组计算非 NA 值。
方法 1:使用 group_by() 和 summarise() 方法
dplyr 包用于通过执行操作和转换在数据中执行模拟。 R 编程语言中的 group_by() 方法用于对 R 中的指定数据帧进行分组。它可用于根据各种聚合函数(如计数、最小值、最大值或总和)对数据进行分类。
句法:
group_by(col-name)
在 group_by() 方法的应用中,使用汇总方法计算根据每个组获得的总值的总数。非空值的总和是使用指定的列名和与 is.na() 方法一起提供的聚合方法 sum() 作为其参数来计算的。
句法:
summarise ( new-col-name = sum(is.na (col-name))
使用管道运算符将这两种方法应用于输入数据帧。输出以 tibble 的形式返回,第一列由 group_by 方法的输入参数组成,第二列被分配指定的新列名并包含每列值的总和。
例子:
R
# creating a dataframe
data_frame <- data.frame(col1 = sample(6:9, 9 , replace = TRUE),
col2 = letters[1:3],
col3 = c(1,4,NA,1,NA,NA,2,NA,2))
print ("Original DataFrame")
print (data_frame)
# grouping data by col1 and giving a total of
# non na values in col3
data_frame %>% group_by(col1) %>% summarise(
non_na = sum(!is.na(col3)))
R
# importing required libraries
library(data.table)
# creating a dataframe
data_frame <- data.frame(col1 = sample(6:9, 9 , replace = TRUE),
col2 = letters[1:3],
col3 = c(1,4,NA,1,NA,NA,2,NA,2))
print ("Original DataFrame")
print (data_frame)
# grouping data by col1 and giving a total
# of non na values in col3
mod_df <- setDT(data_frame)[, .(non_na = sum(!is.na(col3))), col1]
print ("Modified DataFrame")
print (mod_df)
R
# importing required libraries
library(data.table)
# creating a dataframe
data_frame <- data.frame(col1 = sample(6:9, 9 , replace = TRUE),
col2 = letters[1:3],
col3 = c(1,4,NA,1,NA,NA,2,NA,2))
print ("Original DataFrame")
print (data_frame)
# grouping data by col1 and giving a total
# of non na values in col3
mod_df <- aggregate(cbind(
non_na = !is.na(col3))~col1, data_frame, sum)
print ("Modified DataFrame")
print (mod_df)
R
# importing required libraries
library(data.table)
# creating a dataframe
data_frame <- data.frame(col1 = sample(6:9, 9 , replace = TRUE),
col2 = letters[1:3],
col3 = c(1,4,NA,1,NA,NA,2,NA,2))
print ("Original DataFrame")
print (data_frame)
# grouping data by col1 and giving a
# total of non na values in col3
mod_df <- table(data_frame$col1[!is.na(data_frame$col3)])
print ("Modified DataFrame")
print (mod_df)
输出
[1] "Original DataFrame"
col1 col2 col3
1 6 a 1
2 8 b 4
3 6 c NA
4 8 a 1
5 8 b NA
6 9 c NA
7 8 a 2
8 7 b NA
9 6 c 2
# A tibble: 4 x 2
col1 non_na
1 6 2
2 7 0
3 8 3
4 9 0
方法二:使用data.table
R 中的库 data.table 用于根据将数据组织成明确定义的表格结构进行统计计算和审议。 R 中的 setDT 方法用于通过引用将列表(命名和未命名)和数据帧转换为数据表。类似的 sum() 和 is.na() 方法依次应用于数据帧的列以获得最终输出。返回的输出采用 data.table 的形式,其中行号后跟行标识符,后跟冒号。
句法:
setDT(df)[, .(new-col-name = sum(!is.na(new-col-name))), col-name]
例子:
电阻
# importing required libraries
library(data.table)
# creating a dataframe
data_frame <- data.frame(col1 = sample(6:9, 9 , replace = TRUE),
col2 = letters[1:3],
col3 = c(1,4,NA,1,NA,NA,2,NA,2))
print ("Original DataFrame")
print (data_frame)
# grouping data by col1 and giving a total
# of non na values in col3
mod_df <- setDT(data_frame)[, .(non_na = sum(!is.na(col3))), col1]
print ("Modified DataFrame")
print (mod_df)
输出
[1] "Original DataFrame"
col1 col2 col3
1 7 a 1
2 6 b 4
3 6 c NA
4 7 a 1
5 9 b NA
6 8 c NA
7 6 a 2
8 8 b NA
9 8 c 2
[1] "Modified DataFrame"
col1 non_na
1: 7 2
2: 6 2
3: 9 0
4: 8 1
方法 3:使用聚合方法
R 中的聚合方法用于创建从数据帧拆分结果产生的子集,然后计算每个返回组的汇总统计信息。
Syntax:
aggregate (x , data , FUN)
Parameter :
x – the R storage object.
data – the dataframe or list to apply the aggregate method to.
FUN – the function to apply to each of the groups of the dataframe.
R 编程语言中的 cbind() 方法用于生成作为输出生成的列的串联。应用的 FUN 是求和运算,用于计算基于组隔离的非空值的总和。数据是应用 FUN 的输入数据帧。
例子:
电阻
# importing required libraries
library(data.table)
# creating a dataframe
data_frame <- data.frame(col1 = sample(6:9, 9 , replace = TRUE),
col2 = letters[1:3],
col3 = c(1,4,NA,1,NA,NA,2,NA,2))
print ("Original DataFrame")
print (data_frame)
# grouping data by col1 and giving a total
# of non na values in col3
mod_df <- aggregate(cbind(
non_na = !is.na(col3))~col1, data_frame, sum)
print ("Modified DataFrame")
print (mod_df)
输出
[1] "Original DataFrame"
col1 col2 col3
1 7 a 1
2 6 b 4
3 6 c NA
4 7 a 1
5 9 b NA
6 8 c NA
7 6 a 2
8 8 b NA
9 8 c 2
[1] "Modified DataFrame"
col1 non_na
1 7 2
2 6 2
3 9 0
4 8 1
方法 4:使用 table() 方法
R 中的库 data.table 用于根据将数据组织成明确定义的表格结构进行统计计算和审议。 table() 方法用于在计算每个因子水平的组合后生成计数的列联表。因此,它用于执行数据的分类制表。最初,使用 is.na()函数在约束下指定检查 NA 值所需的列。然后提取非空值,并使用 data.table 索引方法生成它们的计数。
句法:
is.na (df$col-name))
例子:
电阻
# importing required libraries
library(data.table)
# creating a dataframe
data_frame <- data.frame(col1 = sample(6:9, 9 , replace = TRUE),
col2 = letters[1:3],
col3 = c(1,4,NA,1,NA,NA,2,NA,2))
print ("Original DataFrame")
print (data_frame)
# grouping data by col1 and giving a
# total of non na values in col3
mod_df <- table(data_frame$col1[!is.na(data_frame$col3)])
print ("Modified DataFrame")
print (mod_df)
输出
[1] "Original DataFrame"
col1 col2 col3
1 7 a 1
2 9 b 4
3 8 c NA
4 6 a 1
5 6 b NA
6 8 c NA
7 9 a 2
8 9 b NA
9 8 c 2
[1] "Modified DataFrame"
6 7 8 9
1 1 1 2