在R中创建具有特定条件的新csv

在R中创建具有特定条件的新csv,r,csv,R,Csv,我是R的新手我想不出办法 我有两个csv文件。a、 csv具有以下格式的数据(名称在此文件中是唯一的) b、 csv具有以下格式的数据(id是唯一的,名称可以出现多次) 现在,我需要为.csv中的每个“名称”创建一个新的csv文件,其中包含第二个csv文件“name1”中相同名称的行 比如说 abc.csv should have 123, abc, 29 145, abc, 45 bcf.csv should be empty for the given files 提前感谢首先尝试以下内

我是R的新手我想不出办法

我有两个csv文件。a、 csv具有以下格式的数据(名称在此文件中是唯一的)

b、 csv具有以下格式的数据(id是唯一的,名称可以出现多次)

现在,我需要为.csv中的每个“名称”创建一个新的csv文件,其中包含第二个csv文件“name1”中相同名称的行

比如说

abc.csv should have
123, abc, 29
145, abc, 45

bcf.csv should be empty for the given files
提前感谢

首先尝试以下内容:

unique(data1[name %in% data2[,name1],])
这在合并具有非唯一键的两个数据集时非常有用。对结果进行一些小的更改后,您应该会得到您的答案。

首先尝试以下方法:

unique(data1[name %in% data2[,name1],])

这在合并具有非唯一键的两个数据集时非常有用。通过对结果进行一些小的更改,您应该可以得到您的答案。

您可以通过一些基本的过滤和一个循环来实现这一点。例如,复制您的示例:

library(dplyr)
df1 = data_frame(name = c("abc", "bcf"), count = c(100, 234))
df2 = data_frame(id = c(123, 33, 145), name1 = c("abc", "bcg", "abc"), count = c(29, 56, 45))
您可以循环第一个文件的唯一名称,并为所有文件过滤第二个数据帧,并将结果写入所需的文件夹

x = lapply(unique(df1$name), function(tmp_name){
  tmp_df = filter(df2, name1 == tmp_name)
  write.csv(tmp_df, file = paste0("~/", tmp_name, ".csv"), row.names = FALSE)
  return(tmp_df)
})

这段代码将在名为abc.csv、bcf.csv等的根文件夹中写入.csv文件(您可以将~更改为您想要的文件夹)。它还将结果保存到对象x中,该对象x是数据帧列表

您可以通过一些基本筛选和一个循环来完成此操作。例如,复制您的示例:

library(dplyr)
df1 = data_frame(name = c("abc", "bcf"), count = c(100, 234))
df2 = data_frame(id = c(123, 33, 145), name1 = c("abc", "bcg", "abc"), count = c(29, 56, 45))
library(dplyr)
df1 = data_frame(name = c("abc", "bcf"), count = c(100, 234))
df2 = data_frame(id = c(123, 33, 145), name1 = c("abc", "bcg", "abc"), count = c(29, 56, 45))

result = 
  df2 %>%
  rename(name = name1, count2 = count) %>%
  semi_join(df1) %>%
  group_by(name) %>%
  do(sub_df = {
    write.csv(.,
              sprintf("/tmp/%s.csv", first(.$name)),
              row.names = FALSE)
    .
  })
您可以循环第一个文件的唯一名称,并为所有文件过滤第二个数据帧,并将结果写入所需的文件夹

x = lapply(unique(df1$name), function(tmp_name){
  tmp_df = filter(df2, name1 == tmp_name)
  write.csv(tmp_df, file = paste0("~/", tmp_name, ".csv"), row.names = FALSE)
  return(tmp_df)
})

这段代码将在名为abc.csv、bcf.csv等的根文件夹中写入.csv文件(您可以将其更改为所需的文件夹)。它还将结果保存到对象x中,该对象x是一个数据帧列表

此答案与您的另一个答案有什么不同?@Paul,这是一个简单的错误。你能添加一些上下文吗。现在你的答案只是一行代码。更多的上下文使OP和其他人更容易理解。这个答案与你的另一个答案有什么不同?@Paul,这是一个简单的错误。你能添加一些上下文吗。现在你的答案只是一行代码。更多的上下文使OP和其他人更容易理解。
library(dplyr)
df1 = data_frame(name = c("abc", "bcf"), count = c(100, 234))
df2 = data_frame(id = c(123, 33, 145), name1 = c("abc", "bcg", "abc"), count = c(29, 56, 45))

result = 
  df2 %>%
  rename(name = name1, count2 = count) %>%
  semi_join(df1) %>%
  group_by(name) %>%
  do(sub_df = {
    write.csv(.,
              sprintf("/tmp/%s.csv", first(.$name)),
              row.names = FALSE)
    .
  })