在R中创建具有特定条件的新csv
我是R的新手我想不出办法 我有两个csv文件。a、 csv具有以下格式的数据(名称在此文件中是唯一的) b、 csv具有以下格式的数据(id是唯一的,名称可以出现多次) 现在,我需要为.csv中的每个“名称”创建一个新的csv文件,其中包含第二个csv文件“name1”中相同名称的行 比如说在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 提前感谢首先尝试以下内
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)
.
})