将一个数据帧的一行粘贴到另一个数据帧的行数匹配的长度。
将一个数据帧的一行粘贴到另一个数据帧的行数匹配的长度。
我现在使用RStudio已经有几个月了,有一件事我一直很困扰。我有一个包含多个csv文件的目录,我需要在RStudio中导入这些文件。每个名称和日期都有多个文件。
csv文件的格式实际上很奇怪。所有数据(数字)在csv的第7行开始。问题是收集文件的信息(名称、日期、设备等)需要分别提取出来。
基本上,for
循环中的temp
数据框的行数是不同的(+200) 。另一方面,info
数据框只有一行(每个csv文件一行)。
我想将这两个文件绑定在一起,使得info
行的长度与关联的df_groinbar
(在csv中)的数据行数相同。不要忘记每个csv文件(df_groinbar
数据框)的长度是不同的,所以info
和df_groinbar
的绑定需要针对每个csv文件进行调整。
df_groinbar <- data.frame() info <- data.frame() for (i in list.files("/Users/Nicolas/Dropbox/Groin Bar/")) { type <- str_extract(i, "([A-Z]+)") temp <- read_csv(i, skip = 6, col_names = c("elapsed_time", "left_squeeze", "right_squeeze", "left_pull", "right_pull")) info_temp <- select(read_csv(i, skip = 2, n_max = 1), 1:6) df_groinbar <- rbind(df_groinbar, temp) info <- rbind(info, info_temp) }
我尝试了smartbind函数和其他很多方法,但都没有成功。
非常感谢!
Nicolas
问题的出现原因是:需要将一个数据框的一行粘贴到另一个数据框中,使得两个数据框的行数保持一致。
解决方法是:
1. 首先,定义一个函数`read_file_custom`,该函数的功能是读取指定文件的数据并进行处理。
2. 使用`list.files`函数获取指定文件夹中所有.csv文件的文件名列表。
3. 使用`purrr::map_df`函数遍历文件名列表,并调用`read_file_custom`函数读取数据,并将文件名作为一个新的列添加到数据框中。
4. 将所有数据框合并成一个新的数据框`result`。
以下是代码中的关键部分:
# 定义读取和处理数据的函数 read_file_custom <- function(fileName) { # 省略部分代码... } # 获取指定文件夹中所有.csv文件的文件名列表 filePattern <- "\\.csv$" fileList <- list.files(path = "./Csv test/", recursive = FALSE, pattern = filePattern, full.names = TRUE) # 遍历文件名列表,读取数据,并将文件名作为一个新的列添加到数据框中 result <- fileList %>% purrr::set_names(nm = (basename(.) %>% tools::file_path_sans_ext())) %>% purrr::map_df(read_file_custom, .id = "FileName")
解决方法的核心是使用`purrr::map_df`函数遍历文件名列表,并调用`read_file_custom`函数读取数据,并将文件名作为一个新的列添加到数据框中。最终得到的`result`数据框包含了所有文件的数据,并且每一行都对应着一个文件的数据。
以上是解决问题的方法,通过该方法可以实现将一个数据框的一行粘贴到另一个数据框中,并保持两个数据框的行数一致。