R语言 如何从列值中编写多个Excel文件

R语言 如何从列值中编写多个Excel文件

数据框架是一个基于单元格的结构,包括属于相同或不同数据类型的行和列。数据框架中的每个单元格都与一个唯一的值相关联,可以是一个确定的值,也可以是一个缺失的值,用NA表示。该数据框结构与Excel表格结构完全一致。因此,数据框的值可以很容易地写进Excel工作表,由 XLSX 扩展名指定。

R编程语言中的 XLSX 包可以用来对Excel文件进行读、写和操作。它是所有不同环境中最突出的包之一,可以执行Excel文档(xls和xlsx)的格式化。它必须被下载和安装,并使用命令下载到工作空间。

install.packages("xlsx")

方法1:使用split()方法

一个数据框可以使用R中内置的data.frame()方法声明为包含一组数值。数据框可以在一个或多个列中包含不同或重复的数值。split()方法可以用来将输入的数据框隔离成多个子集,这取决于参数列中包含的值。创建的组的数量取决于应用列条件后获得的不同值的数量。这个方法的语法如下:

语法:

split ( dataframe , function)

参数 :

  • dataframe – 要分割的输入数据框
  • function – 要分割的数据帧所依据的因素。

然后可以用lapply()方法对得到的数据帧进行迭代,直到得到的数据帧的数量。这个方法在R中返回一个与所提供的数据框长度相同的列表,其中的每个元素都是对输入数据框的相应元素应用FUN的结果。

语法:

lapply (X, FUN, …)

参数

  • X – 要应用函数的原子向量或数据框
  • FUN – 要在X的每个元素上应用的函数。

每次对子集数据框进行迭代时,数据框的内容被写入一个xlsx工作表,其完整路径被提供,并与split()方法中输入列的相应不同单元值相连接。在路径上创建的工作表的数量相当于使用split()方法创建的不同分组的数据框架的数量。

下面的代码片段使用了数据框架的col3列,工作表的数量与该列的唯一值相对应。

# invoking the required packages
library(xlsx)
  
#creating a data frame
data_frame <- data.frame(col1=c(1:10),
                        col2=c("Anna","Mindy","Bindy",
                               "Tindy","Ron",
                               "Charles","Zoe","Dan",
                               "Lincoln","Burrows"),
                        col3=c("CS","CA","Eco","Eco","CA",
                               "Eco","CS","CS","CS","Eco"))
  
# segregating data based on the col3 values
data_mod <- split(data_frame, data_frame$col3)
  
# printing the obtained groups
print("Segregated dataframes")
print(data_mod)

输出:

[1] "Segregated dataframes"
CA
col1  col2 col3
2    2 Mindy   CA
5    5   Ron   CACS
col1    col2 col3
1    1    Anna   CS
7    7     Zoe   CS
8    8     Dan   CS
9    9 Lincoln   CS
$Eco
 col1    col2 col3
3     3   Bindy  Eco
4     4   Tindy  Eco
6     6 Charles  Eco
10   10 Burrows  Eco

现在,让我们迭代地创建XLSX文件。

# getting the size of different
# number of groups obtained
size <- length(data_mod)
  
#creating number of lists equivalent
# to the size of the generated groups 
lapply(1:size, 
      function(i) 
      write.xlsx(data_mod[[i]],
                 file = paste0("/Users/mallikagupta/Desktop/",
                               names(data_mod[i]), ".xlsx")))

输出

[[1]]
NULL

[[2]]
NULL

[[3]]
NULL

解释一下

由于有三个不同的组属于data_frame的col3,因此,在指定的路径位置创建了三个不同的excel表,其名称与该特定组的col3值相对应。输入数据框的整个行被复制到指定的excel表。

如何从列值中编写多个Excel文件--R编程

通过使用数据框架创建的Excel文件

如何从列值中编写多个Excel文件--R编程

以CA值为col3的Excel文件

如何从列值中编写多个Excel文件--R编程

以CS值为col3的Excel文件

如何从列值中编写多个Excel文件--R编程

以Eco值为col3的Excel文件

方法2:使用group_split()方法

group_split()方法也可以用来根据作为参数的列,将输入的数据框分成多个子集。列或逻辑条件也可以被指定为该方法的参数。该方法也可以使用管道操作符提供给数据框。

语法:

group_split ( dataframe , function)

参数 :

  • dataframe – 要分割的输入数据框
  • function – 要分割数据框的基础上的因素。

在下面的代码片段中,一个条件被应用在输入数据框架的col4列上。该条件检查col4的值是否大于2。根据布尔值的 “真 “或 “假”,形成两个组。因此,两个excel文件被创建,一个是col4值<=2,另一个是col4值>2。

# invoking the required packages
library("xlsx")
library("dplyr")
  
# creating a data frame
data_frame <- data.frame(col1 = c(1:10),
                        col2=c("Anna","Mindy","Bindy",
                               "Tindy","Ron",
                               "Charles","Zoe","Dan",
                               "Lincoln","Burrows"),
                        col3=c("CS","CA","Eco","Eco","CA",
                               "Eco","CS","CS","CS","Eco"),
                        col4=c(1,3,2,2,3,4,1,4,1,2))
  
# segregating data based on the boolean condition of 
# whether the col3 values is greater that 2 or not 
data_mod <- data_frame %>% 
 group_split(col4>2)
  
# printing the different groups created 
print("Segregated data frames")
  
# two groups are created 
print(data_mod)

输出

[1] "Segregated data frames"
<list_of<
tbl_df<
  col1    : integer
  col2    : character
  col3    : character
  col4    : double
  col4 > 2: logical
>[2]>
[[1]]
# A tibble: 6 × 5
 col1 col2    col3   col4 `col4 > 2`
<int> <chr>   <chr> <dbl> <lgl>     
1     1 Anna    CS        1 FALSE     
2     3 Bindy   Eco       2 FALSE     
3     4 Tindy   Eco       2 FALSE     
4     7 Zoe     CS        1 FALSE     
5     9 Lincoln CS        1 FALSE     
6    10 Burrows Eco       2 FALSE    
[[2]]
# A tibble: 4 × 5
 col1 col2    col3   col4 `col4 > 2`
<int> <chr>   <chr> <dbl> <lgl>     
1     2 Mindy   CA        3 TRUE      
2     5 Ron     CA        3 TRUE      
3     6 Charles Eco       4 TRUE      
4     8 Dan     CS        4 TRUE
# getting the size of different
# number of groups obtained
size <- length(data_mod)
  
# creating number of lists equivalent
# to the size of the generated groups 
lapply(1:size, 
      function(i) 
      write.xlsx(data_mod[[i]],
      file = paste0("/Users/mallikagupta/Desktop/new_",
                    i, ".xlsx")))

输出:

[[1]]
NULL

[[2]]
NULL

解释:

在返回的Tibbles集合中的最后一列是用标题 “col4>2 “创建的,它分别指向两种类型的值,一个逻辑的TRUE值和一个FALSE值。col4的值每次都被验证,然后整个行被复制到相应的表中。

如何从列值中编写多个Excel文件--R编程

Excel文件中的3,和4值为col4

如何从列值中编写多个Excel文件--R编程

以1,2个值作为col4的Excel文件

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程