将列表中的所有数据帧合并到r

时间:2018-01-13 03:26:23

标签: r list dataframe

这个是一个很好的。我已经试图解决这个问题一段时间了,但我一直在撞墙。所以,我以科学的名义来寻找这个。

简介

我在目录中有大约93个具有唯一名称的文件。我使用r将这些文件读入列表。

files.measurements <- as.character(list.files(path = "~/measurements/", full.names = TRUE))

所以,这样做只是找到目录中所有文件的名称。所有这些文件都是.csv。给我带来了很多麻烦。

然后我读了文件的名字。 measurements.filenames <- gsub(".csv", "", basename(files.measurements))

读取这些文件的原因是每个文件名代表测量的名称。文件中的相同项目可能存在也可能不存在于多个文件中。

例如 有5个文件名,即NameANameBNameCNameDNameE。每个文件有8个列名:id,name,sex,dob,...,measurement。 (每个文件名的名称相同)

当然,id是唯一的,但如果NameB中存在,则NameA可能存在也可能不存在。

需要 所以,我需要做的是将这93个文件合并到一个数据框中,使数据框包含idnamesexdob,......例如,measurement文件的名称 - NameA。对于相同的ID,该值应该相同,如果ID不存在,rbind到具有附加列的数据框,否则如果id存在,只需将measurement添加到具有新列名称的列 - NameB

你能帮帮忙吗?这是为了研究收集心血管和HIV疾病的数据。

修改 DATA NameA

id  gender  dob status  date    measurement
1   F   5/24/1942   Rpt 1/12/2018   2.9
2   F   12/1/2017   Rpt 1/12/2018   0.622
3   M   11/15/1957  Rpt 1/11/2018   3.6
4   M   5/17/1947   Rpt 1/11/2018   3.5
5   F   7/17/1955   Rpt 1/11/2018   2.7

NameB

id  gender  dob status  date    measurement
1   F   5/24/1942   Rpt 1/12/2018   3.5
2   F   12/1/2017   Rpt 1/12/2018   2.5
8   M   11/15/1957  Rpt 1/11/2018   1.9
10  M   5/17/1947   Rpt 1/11/2018   0.8
11  F   7/17/1955   Rpt 1/11/2018   1.2

解释

因此,如您所见,两个表中的所有列都相同,但最后一次测量是不同的。请暂时忽略genderdobstatusdate列。让我们关注idmeasurement。如您所见,12两个表中都有NameANameB。如果是这种情况,那么NameB的衡量标准应该添加到measurement的{​​{1}}旁边的数据框中,并带有名称(例如NameB)。并且对于名称B NameB-measurementNameA should be added as new row with测量中from不存在的所有内容as blank but添加了NameA 9463216549 6541335466 6749746326 6546879994 NameB-measurement`。

我知道这很复杂,但这就是研究人员如何向我提供数据。我需要以某种方式清理它。

1 个答案:

答案 0 :(得分:7)

尝试以下方法:

nls