将一个数据帧的一行粘贴到另一个数据帧的行数匹配的长度。

10 浏览
0 Comments

将一个数据帧的一行粘贴到另一个数据帧的行数匹配的长度。

我现在使用RStudio已经有几个月了,有一件事我一直很困扰。我有一个包含多个csv文件的目录,我需要在RStudio中导入这些文件。每个名称和日期都有多个文件。

csv文件的格式实际上很奇怪。所有数据(数字)在csv的第7行开始。问题是收集文件的信息(名称、日期、设备等)需要分别提取出来。

基本上,for循环中的temp数据框的行数是不同的(+200) 。另一方面,info数据框只有一行(每个csv文件一行)。

我想将这两个文件绑定在一起,使得info行的长度与关联的df_groinbar(在csv中)的数据行数相同。不要忘记每个csv文件(df_groinbar数据框)的长度是不同的,所以infodf_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

0
0 Comments

问题的出现原因是:需要将一个数据框的一行粘贴到另一个数据框中,使得两个数据框的行数保持一致。

解决方法是:

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`数据框包含了所有文件的数据,并且每一行都对应着一个文件的数据。

以上是解决问题的方法,通过该方法可以实现将一个数据框的一行粘贴到另一个数据框中,并保持两个数据框的行数一致。

0