[英]how to reshape my data frame in R (transpose, select, remove row)?
這是我有的數據框(ttt):
.id dn mavg up pctB
AA.1 18.8 21.1 23.4 0.8
AA.2 18.7 21.1 23.5 0.8
AA.3 18.7 21.2 23.7 0.8
AAN.1 23.1 24.6 26.1 0.5
AAN.2 23.1 24.6 26.0 0.4
AAN.3 23.1 24.5 26.0 0.5
AAP.1 145.5 179.2 212.9 0.3
AAP.2 144.2 177.4 210.7 0.3
AAP.3 143.4 175.6 207.7 0.3
我想要的形狀如下:
pctB.1 pctB.2 pctB.3
AA 0.8 0.8 0.8
AAN 0.5 0.4 0.5
AAP 0.3 0.3 0.3
我唯一需要的列是 pctB。 我試着寫:
ttt <- ttt %>% select(1,5)
ttt <- do.call(cbind, split(ttt, ttt$`.id`))
ttt <- t(ttt)
它給出了我不想要的結果。 我該怎么辦?
<error/rlang_error>
`n()` must only be used inside dplyr verbs.
Backtrace:
1. plyr::mutate(., .id = sub("\\..*", "", .id))
1. dplyr::group_by(., .id)
8. plyr::mutate(., col = paste0("pctB.", row_number()))
9. [ base::eval(...) ] with 1 more call
12. dplyr::row_number()
13. dplyr::n()
14. dplyr:::peek_mask("n()")
15. dplyr:::context_peek("mask", fun)
16. context_peek_bare(name) %||% abort(glue("`{fun}` must only be used inside {location}."))
您可以從中刪除其他字符,創建一個唯一的 id 列並僅選擇感興趣的列以寬格式獲取數據。
library(dplyr)
library(tibble)
ttt %>%
mutate(.id = sub('\\..*', '', .id)) %>%
group_by(.id) %>%
mutate(col = paste0('pctB.', row_number())) %>%
select(-(dn:up)) %>%
tidyr::pivot_wider(names_from = col, values_from = pctB)
# .id pctB.1 pctB.2 pctB.3
# <chr> <dbl> <dbl> <dbl>
#1 AA 0.8 0.8 0.8
#2 AAN 0.5 0.4 0.5
#3 AAP 0.3 0.3 0.3
數據
ttt <- structure(list(.id = c("AA.1", "AA.2", "AA.3", "AAN.1", "AAN.2",
"AAN.3", "AAP.1", "AAP.2", "AAP.3"), dn = c(18.8, 18.7, 18.7,
23.1, 23.1, 23.1, 145.5, 144.2, 143.4), mavg = c(21.1, 21.1,
21.2, 24.6, 24.6, 24.5, 179.2, 177.4, 175.6), up = c(23.4, 23.5,
23.7, 26.1, 26, 26, 212.9, 210.7, 207.7), pctB = c(0.8, 0.8,
0.8, 0.5, 0.4, 0.5, 0.3, 0.3, 0.3)),class = "data.frame", row.names = c(NA, -9L))
將.id
拆分為兩個單獨的列(例如"AA.1"
-> "AA", "1"
),然后通過這兩列旋轉它。
library(tidyverse)
ttt %>%
mutate(.id.1 = str_split(.id, "\\.") %>% map(~ .[[1]]) %>% unlist,
.id.2 = str_split(.id, "\\.") %>% map(~ paste0("pctB.", .[[2]])) %>% unlist) %>%
pivot_wider(id_cols = .id.1,
names_from = .id.2,
values_from = pctB) %>%
column_to_rownames(".id.1")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.