簡體   English   中英

無法將map2與帶有purrr和dplyr的mutate一起使用

[英]Failed to use map2 with mutate with purrr and dplyr

我正在閱讀計算機中的文件列表,並使用purrr和dplyr對它們進行一些轉換,一切正常,但是我有一個帶有創建的每個數據幀的ID的向量,並且我想添加一個ID為每個數據幀的數據。

加載庫
ArchivosTemp <- list.files(pattern = "Tem.csv")

讀取要讀取和修改的文件列表

 ArchivosTemp <- list.files(pattern = "Tem.csv") 

出於可復制目的

假設代碼第一行之后是稱為Temperaturas的數據幀列表

IDs <- c("H1F102", "H1F105", "H1F106")

和一個帶有列表中每個元素的ID的向量

a <- ArchivosTemp %>% map(read_csv) %>% map(~rename(.x, Temperatura = Value, Date.Time = `Date/Time`)) %>% map(~mutate(.x, Date.Time = dmy_hms(Date.Time))) %>% map(~select(.x, Date.Time, Temperatura))

到目前為止有效的purrr代碼

a <- Temperaturas %>% map(~rename(.x, Temperatura = Value, Date.Time = `Date/Time`)) %>% map(~mutate(.x, Date.Time = dmy_hms(Date.Time))) %>% map(~select(.x, Date.Time, Temperatura))

由於您無法從mu電腦讀取csv, ArchivosTemp %>% map(read_csv)用我上面創建的列表替換ArchivosTemp %>% map(read_csv)

a <- Temperaturas %>% map(~rename(.x, Temperatura = Value, Date.Time = `Date/Time`)) %>% map(~mutate(.x, Date.Time = dmy_hms(Date.Time))) %>% map(~select(.x, Date.Time, Temperatura))  %>% map2(y = IDs,~mutate(.x, ID = y.))

然后,我希望這3個數據幀中的每一個都有一個名為ID的列,並在ID向量中包含其對應的元素,我嘗試過這樣:

 a <- Temperaturas %>% map(~rename(.x, Temperatura = Value, Date.Time = `Date/Time`)) %>% map(~mutate(.x, Date.Time = dmy_hms(Date.Time))) %>% map(~select(.x, Date.Time, Temperatura)) %>% map2(y = IDs,~mutate(.x, ID = y.)) 

但它不起作用,關於我在做什么錯的任何想法?

預期結果

例如,這是我期望僅使用第一個數據幀的結果

# A tibble: 6 x 3
            Date.Time Temperatura     ID
               <dttm>       <int>  <chr>
1 2020-07-01 16:14:55          28 H1F102
2 2020-07-01 16:15:55          24 H1F102
3 2020-07-01 16:16:55          25 H1F102
4 2020-07-01 16:17:55          25 H1F102
5 2020-07-01 16:18:55          25 H1F102
6 2020-07-01 16:19:55          25 H1F102

變成

 # A tibble: 6 x 3 Date.Time Temperatura ID <dttm> <int> <chr> 1 2020-07-01 16:14:55 28 H1F102 2 2020-07-01 16:15:55 24 H1F102 3 2020-07-01 16:16:55 25 H1F102 4 2020-07-01 16:17:55 25 H1F102 5 2020-07-01 16:18:55 25 H1F102 6 2020-07-01 16:19:55 25 H1F102 

您在map2遇到一個較小的參數問題,參數名為.x.y ,將y更改為.y對我有效:

map2(.y = IDs, ~ mutate(.x, ID = .y))

此外,如果最終需要將列表中的所有元素作為單個數據幀綁定,則可以使用IDs向量將set_names到列表中,然后在map_df指定.id參數,它將映射和bind_rows中所有數據幀的行形成一個新的最終數據框架,並將列表名稱轉換為名稱為.id的新列:

Temperaturas %>% 
    set_names(IDs) %>% 
    map_df(~ transmute(.x, Date.Time=dmy_hms(`Date/Time`), Temperatura=Value), .id="ID")

# A tibble: 18 x 3
#       ID           Date.Time Temperatura
#    <chr>              <dttm>       <int>
# 1 H1F102 2020-07-01 16:14:55          28
# 2 H1F102 2020-07-01 16:15:55          24
# 3 H1F102 2020-07-01 16:16:55          25
# 4 H1F102 2020-07-01 16:17:55          25
# 5 H1F102 2020-07-01 16:18:55          25
# 6 H1F102 2020-07-01 16:19:55          25
# 7 H1F105 2020-06-12 16:19:44          31
# 8 H1F105 2020-06-12 16:20:44          29
# 9 H1F105 2020-06-12 16:21:44          27
#10 H1F105 2020-06-12 16:22:44          26
#11 H1F105 2020-06-12 16:23:44          26
#12 H1F105 2020-06-13 16:00:44          24
#13 H1F106 2016-06-07 07:54:01          23
#14 H1F106 2016-06-07 08:54:01          19
#15 H1F106 2016-06-07 09:54:01          25
#16 H1F106 2016-06-07 10:54:01          27
#17 H1F106 2016-06-07 11:54:01          30
#18 H1F106 2016-06-07 12:54:01          34

此外,您可以使用transmute作為rename %>% mutate %>% select的簡寫

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM