【问题标题】:make a new csv with certain conditions in R在 R 中创建具有特定条件的新 csv
【发布时间】:2015-09-13 18:32:57
【问题描述】:

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

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

name, count
abc,  100
bcf,  234

b.csv 有以下格式的数据(id 是唯一的,name 可以出现多次),

id,  name1, count
123, abc,   29
33,  bcg,   56
145, abc,   45

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

例如

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

bcf.csv should be empty for the given files

提前致谢

【问题讨论】:

    标签: r csv


    【解决方案1】:

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

    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)
    })
    

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

    【讨论】:

      【解决方案2】:

      先试试这个:

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

      当您合并两个具有非唯一键的数据集时,这很有用。对结果进行一些小的更改,您应该会有答案。

      【讨论】:

      • 这个答案与你的另一个答案有何不同?
      • @Paul,这是一个简单的错误。
      • 你能添加一些上下文吗?现在你的答案只是一行代码。更多上下文使 OP 和其他人更容易理解。
      【解决方案3】:
      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)
          .
        })
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-17
        • 1970-01-01
        相关资源
        最近更新 更多