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文件
以CA值为col3的Excel文件
以CS值为col3的Excel文件
以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文件中的3,和4值为col4
以1,2个值作为col4的Excel文件