这个是一个doozy.我一直试图弄清楚这一点,但我一直在撞墙.所以,我是以科学的名义来寻找这个.
简介
我在目录中有大约93个具有唯一名称的文件.我使用r将这些文件读入列表.
files.measurements <- as.character(list.files(path = "~/measurements/", full.names = TRUE))
所以,这样做只是找到目录中所有文件的名称.所有这些文件都是.csv.给我带来了很多麻烦.
然后我读了文件的名称.
measurements.filenames <- gsub(".csv", "", basename(files.measurements))
读取这些文件的原因是因为每个文件名都代表测量的名称.文件中的相同项目可能存在也可能不存在于多个文件中.
例
有5个文件名,即,NameA,NameB,NameC,NameD,NameE.每个文件有8个列名:id,name,sex,dob,...,measurement.(每个文件名的名称相同)
当然,id是唯一的,但NameB如果存在,则可能存在也可能不存在int NameA.
需要
所以,我需要做的就是这些93个文件合并到一个单一的数据帧,使得数据帧中包含id,name,sex,dob和,......而不是measurement文件名- NameA,例如.对于相同的id,值应该相同,如果id不存在,则rbind对于具有附加列的数据帧,否则如果id存在,则只需measurement使用新列名称添加到列中NameB.
你能帮忙吗?这是为了研究收集心血管和HIV疾病的数据.
编辑
数据
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
说明
因此,如您所见,两个表中的所有列都相同,但最后一次测量是不同的.请忽略gender,dob,status和date现在列.让我们专注于id和measurement.正如你所看到的,id 1和2都在表NameA和NameB.如果是这种情况,NameB则应将测量值添加到measurementfrom NameBwith name(如NameB-measurement)旁边的数据帧中.并且对于NameANameB should be added as new row with测量中不存在的所有id,fromNameA as blank butNameB-measurement`添加.
我知道这很复杂,但这就是研究人员给我的数据.我需要以某种方式清理它.
请尝试以下方法:
# collecting all the csv files in a given folder
files.measurments <- base::list.files(path = ".", include.dirs = FALSE)
# reading all csv files into a list of dataframes
files.combined <- purrr::map(files.measurements, read.csv)
# combining the individual dataframes into a single dataframe
finaldf <- plyr::rbindfill(files.combined)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |