我有一個表,其中包含一個信號值和定義信號型別的附加列。每個位置都有所有型別的信號。參見示例:
d <- data.frame("location"=c("L1","L1","L1","L2","L2","L2"),"signal"=c(1.1,1.04,1.75,1.24,2.2,22),"type1"=c(1,0,0,1,0,0),"type2"=c(0,1,0,0,1,0),"type3"=c(0,0,1,0,0,1))
d
location signal type1 type2 type3
1 L1 1.10 1 0 0
2 L1 1.04 0 1 0
3 L1 1.75 0 0 1
4 L2 1.24 1 0 0
5 L2 2.20 0 1 0
6 L2 22.00 0 0 1
我想把這張表旋轉得更寬,所以每種型別的信號都有自己的列來描述信號,例如:
location type1 type2 type3
L1 1.10 1.04 1.75
L2 1.24 2.20 22.00
謝謝你。
uj5u.com熱心網友回復:
這里的技巧是將資料集轉換為整潔(長)格式,因為現在它是寬和長的混合。這是這樣做的一種方法,pivot_wider最后是。
library(tidyverse)
d %>%
pivot_longer(starts_with("type")) %>%
filter(value>0) %>%
select(-value) %>%
pivot_wider(names_from = name, values_from = signal)
# A tibble: 2 x 4
location type1 type2 type3
<chr> <dbl> <dbl> <dbl>
1 L1 1.1 1.04 1.75
2 L2 1.24 2.2 22
uj5u.com熱心網友回復:
這是另一種tidyverse選擇,我們可以在其中創建一個帶有信號型別的新列,然后放入寬格式。本質上,對于type列,我們回傳具有最大值的列的列名(即1)。
library(tidyverse)
d %>%
mutate(name = pmap(across(starts_with("type")), ~ names(c(...)[which.max(c(...))]))) %>%
pivot_wider(id_cols = location, names_from = name, values_from = signal)
輸出
location type1 type2 type3
<chr> <dbl> <dbl> <dbl>
1 L1 1.1 1.04 1.75
2 L2 1.24 2.2 22
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/449406.html
