我目前正在努力從 R 中的函式計算中移動資料。我有 8 列計算了不同條件(型別)下同一點的某個 y 值,我的輸出如下所示:
ydata <- output %>% select(x, type, y_a,y_b,y_c,y_d,y_e,y_f,y_g,y_h)
ydata
#> x type y_a y_b y_c ...
#> 1 1 1.3 <NA> <NA>
#> 2 1 2.7 <NA> <NA>
#> 3 1 4.4 <NA> <NA>
#> 1 2 <NA> 2.2 <NA>
#> 2 2 <NA> 3.3 <NA>
#> 3 2 <NA> 4.4 <NA>
#> 1 3 <NA> <NA> 3.3
#> 2 3 <NA> <NA> 7.6
#> 3 3 <NA> <NA> 11.3
...
然而,我想要的輸出看起來像這樣,我不確定如何產生:
#> x y_a y_b y_c ...
#> 1 1.3 2.2 3.3
#> 2 2.7 3.3 7.6
#> 3 4.4 4.4 11.3
...
我試過使用 summarize() 按 x 將變數分組在一起,但這樣做不會以所需的方式移動列的資料,因此 <NA> 值不會出現在資料框中。
uj5u.com熱心網友回復:
根據提供的示例,這可能有效
library(dplyr)
df %>%
group_by(x) %>%
summarize(across(contains("_"), ~ .x[.x != "<NA>"]))
# A tibble: 3 × 4
x y_a y_b y_c
<int> <chr> <chr> <chr>
1 1 1.3 2.2 3.3
2 2 2.7 3.3 7.6
3 3 4.4 4.4 11.3
資料
df <- structure(list(x = c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L), type = c(1L,
1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L), y_a = c("1.3", "2.7", "4.4",
"<NA>", "<NA>", "<NA>", "<NA>", "<NA>", "<NA>"), y_b = c("<NA>",
"<NA>", "<NA>", "2.2", "3.3", "4.4", "<NA>", "<NA>", "<NA>"),
y_c = c("<NA>", "<NA>", "<NA>", "<NA>", "<NA>", "<NA>", "3.3",
"7.6", "11.3")), class = "data.frame", row.names = c(NA,
-9L))
uj5u.com熱心網友回復:
這是沒有以最有效的方式構建y_a, ... 列的結果。y_b
你可以修復它這樣做:
pivot_longer(df,cols = -(x:type)) %>%
filter(value!="<NA>") %>%
pivot_wider(x)
輸出:
x y_a y_b y_c
<int> <chr> <chr> <chr>
1 1 1.3 2.2 3.3
2 2 2.7 3.3 7.6
3 3 4.4 4.4 11.3
或者以稍微不那么冗長的方式:
pivot_wider(filter(pivot_longer(df,cols = -(x:type)), value!="<NA>"),x)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/536381.html
標籤:rdplyr
下一篇:如何將列串列中的第一個字母大寫?
