📜  在R中的DataFrame中按组计算非NA值

📅  最后修改于: 2022-05-13 01:55:20.554000             🧑  作者: Mango

在R中的DataFrame中按组计算非NA值

在本文中,我们将讨论如何在 R 编程语言中按数据帧中的组计算非 NA 值。

方法 1:使用 group_by() 和 summarise() 方法

dplyr 包用于通过执行操作和转换在数据中执行模拟。 R 编程语言中的 group_by() 方法用于对 R 中的指定数据帧进行分组。它可用于根据各种聚合函数(如计数、最小值、最大值或总和)对数据进行分类。

句法:

在 group_by() 方法的应用中,使用汇总方法计算根据每个组获得的总值的总数。非空值的总和是使用指定的列名和与 is.na() 方法一起提供的聚合方法 sum() 作为其参数来计算的。



句法:

使用管道运算符将这两种方法应用于输入数据帧。输出以 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 的形式,其中行号后跟行标识符,后跟冒号。

句法:



例子:

电阻

# 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 中的聚合方法用于创建从数据帧拆分结果产生的子集,然后计算每个返回组的汇总统计信息。

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 索引方法生成它们的计数。

句法:

例子:

电阻

# 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